본문 바로가기
Dev/Java

final에 대한 이해

by 세대교체 2024. 10. 24.

final

final 키워드는 변수, 메서드, 또는 클래스에 대한 변경 불가능 하도록 하는 데 사용된다.

final 키워드를 사용하면 그 요소는 한 번 할당되거나 정의된 후 변경될 수 없다.

 

 

변수에 final 사용

지역 변수

final로 선언된 지역 변수는 한 번만 값을 할당할 수 있다.

초기화 이후에는 그 값이 변경될 수 없다.

 

필드 (멤버 변수)

객체의 필드에 final을 사용하면 객체가 생성될 때 필드를 초기화해야 하며, 그 이후에는 그 필드의 값을 변경할 수 없다.

 

파라미터

메서드의 파라미터를 final로 선언하면, 메서드 안에서 파라미터의 값을 변경할 수 없다.

이는 메서드 안에서 파라미터가 참조하는 데이터의 무결성을 유지한다.

 

 

메서드에 final 사용

final로 선언된 메서드는 하위 클래스에서 오버라이드(override)될 수 없다.

이를 통해 상위 클래스의 기본 동작을 보존하고 변경되지 않게 한다.

 

 

클래스에 final 사용

final로 선언된 클래스는 다른 클래스가 상속할 수 없다.

즉, final 클래스는 확장될 수 없다.

 

 

final 사용 시 이점

불변성

final 변수는 읽기 전용이 되므로 애플리케이션의 실행 도중에 예상치 못한 변경으로부터 안전하다.

 

스레드 안정성

멀티스레드 환경에서 final 필드는 한 번 생성되고 초기화된 이후에는 변경되지 않으므로, 스레드 간에 안전하게 공유될 수 있다.

 

 

불변 객체와의 차이점

final 변수는 변수의 재할당을 막지만 객체의 내부 상태 변화는 막지 않는다.

반면, 불변 객체(Immutable Object)는 객체가 생성된 후에는 그 상태가 절대로 변하지 않음을 보장한다.

 

예를 들어, final로 선언된 List 객체는 다른 List 객체로 재할당될 수는 없지만 리스트에 항목을 추가하거나 제거하는 것은 가능하다.