Backend Roadmap/Java

[Java] final 키워드

jungeun919 2024. 9. 3. 04:39

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