반응형
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 |