반응형

Java에서는 특정한 예약어(keywords)들을 사용해 클래스/메서드/변수의 속성을 제한하거나 제어할 수 있습니다.
이 글에서는 가장 많이 사용되는 final, static, this, super 키워드에 대해 정리하고, 언제 어떻게 사용하는지 코드 예제와 함께 비교해보겠습니다.


final 키워드

final수정 불가(변경 불가능)를 의미합니다. 변수, 메서드, 클래스 등 다양한 곳에 사용됩니다.

적용 대상 의미
변수 값이 한 번만 할당 가능 (상수처럼 사용)
메서드 오버라이딩 불가
클래스 상속 불가

 

final int MAX_COUNT = 10;
MAX_COUNT = 20; // 컴파일 에러

final class Animal {}
class Dog extends Animal {} // 컴파일 에러 (상속 불가)

class Parent {
    final void speak() {}
}
class Child extends Parent {
    void speak() {} // 에러: final 메서드는 오버라이드 불가
}

static 키워드

static공용(클래스 단위) 개념입니다. 인스턴스 생성 없이 사용 가능하고, 메모리 효율성을 높입니다.

적용 대상 의미
변수 모든 객체가 공유하는 클래스 변수
메서드 객체 없이 클래스명으로 호출 가능
블록 클래스 초기화 시 자동 실행되는 정적 블록

 

class Counter {
    static int count = 0;

    Counter() {
        count++;
        System.out.println(count);
    }
}

Counter c1 = new Counter(); // 1
Counter c2 = new Counter(); // 2

this 키워드

this현재 인스턴스 자신을 참조합니다. 주로 변수 이름 충돌 해결이나 코드의 가독성을 높이기 위해 명시적으로 사용합니다.

class Person {
    String name;

    Person(String name) {
        this.name = name; // 왼쪽: 인스턴스 변수, 오른쪽: 매개변수
    }

    void print() {
        System.out.println(this.name); // 현재 인스턴스의 name
    }
}

super 키워드

super부모 클래스 요소에 접근할 때 사용합니다. 생성자 호출이나 오버라이드 메서드 안에서 사용됩니다.

class Parent {
    String name = "부모";
    void greet() {
        System.out.println("안녕 from 부모");
    }
}

class Child extends Parent {
    String name = "자식";

    void greet() {
        super.greet(); // 부모 메서드 호출
        System.out.println(super.name); // 부모 변수 접근
    }
}

요약 비교표

키워드 사용 위치 주요 기능
final 변수/메서드/클래스 값/상속/오버라이드 불가로 제한
static 변수/메서드/블록 클래스 단위로 공유, 인스턴스 없이 접근
this 인스턴스 내부 현재 객체 참조, 변수 충돌 해결, 코드 가독성을 위한 명시적 사용
super 상속 구조 내부 부모 클래스 요소 참조 (메서드, 변수 등)

 


실무 팁

  • final 변수는 상수처럼 사용하며, static final 조합으로 전역 상수를 선언할 수 있습니다.
  • static 메서드는 공용 기능을 제공하는 유틸성 클래스에서 많이 사용됩니다.
  • this는 주로 생성자 파라미터 명과 멤버변수 이름이 같을 때 사용하거나, 코드 가독성을 위해 명시적으로 사용할 때 사용합니다.
  • super는 오버라이딩한 메서드에서 부모의 로직을 확장할 때 유용합니다.

마무리

Java의 핵심 키워드인 final, static, this, super는 객체 지향 프로그래밍에서 매우 자주 사용됩니다.
각각의 의미와 쓰임을 정확히 이해하고, 상황에 맞게 사용하는 것이 중요합니다.

반응형

'개발새발 > Java' 카테고리의 다른 글

Java의 핵심 키워드: volatile, transient, synchronized  (1) 2025.06.16
Java의 메모리 영역  (0) 2024.05.26
인터페이스 vs 추상클래스  (0) 2024.05.26

+ Recent posts