Java에서 final 키워드는 불변성 보장을 위해 변수, 메서드, 클래스 등 여러 요소에 붙여 사용하며, 각 경우에 따라 의미가 달라진다. 공통적으로 예기치 않게 수정되는 것을 방지함으로써 의도된 동작을 보장한다.
변수
변수에 final을 사용하면 해당 변수의 값은 수정할 수 없다. 그렇기 때문에 초기화는 필수적이다. 선언하는 즉시 초기화하지 않아도 되지만 해당 변수를 사용하기 전에 반드시 한 번 초기화해야 하며, 그렇지 않으면 컴파일 에러가 발생한다.
final int birth = 2024;
birth = 2025; // 컴파일 오류: 재할당 불가능
// or
class TestClass {
final int birth;
TestClass(int birth) {
this.birth = birth; // 생성자에서 초기화 가능
}
}
메서드
메서드에 final 키워드를 사용하면 해당 메서드는 하위 클래스에서 오버라이드(재정의)할 수 없다. 일반적으로 클래스를 상속하면 해당 클래스의 public, protected 접근 제어자를 가진 메서드를 상속해서 재구현이 가능하다. 하지만 하위 클래스에서 특정 메서드가 변경되지 않도록 하고자 할 때 사용한다.
class ParentClass {
final void printMsg() {
System.out.println("부모 클래스");
}
}
class ChildClass extends ParentClass {
void printMsg() { // 컴파일 오류: 오버라이드 불가능
}
}
클래스
클래스에 final 키워드를 사용하면 해당 클래스를 상속할 수 없다. 따라서 하위 클래스를 가지지 않는다. 대표적인 예로, Integer와 같은 Wrapper 클래스가 있다.
static + final 조합
final 키워드는 static과 함께 사용될 수 있으며, 보통 클래스의 전역 상수로 정의하는 데 사용된다. 따라서 모든 인스턴스가 동일한 값을 공유하고, 한 번 초기화되면 변경되지 않는다.
'Backend Roadmap > Java' 카테고리의 다른 글
정적 바인딩과 동적 바인딩 (0) | 2024.06.25 |
---|---|
가비지 컬렉션(Garbage Collection) (0) | 2024.06.25 |
오토 박싱과 오토 언박싱 (0) | 2024.06.25 |
스트림(Stream) (0) | 2024.06.25 |
자바 타입 제네릭(Generic) (0) | 2024.06.25 |