[Java] final란 무엇인가?
1. Question
Java에서 final
란 무엇인가?
2. Answer
Java에서 final
키워드는 변수, 메서드, 또는 클래스에 대한 변경 불가능성을 지정하는 데 사용된다. final
키워드를 사용하면 그 요소는 한 번 할당되거나 정의된 후 변경될 수 없다. 이는 코드의 가독성, 안정성, 유지보수성을 향상시키는 데 도움이 된다.
3. Detail
A. 변수에 final 사용
-
지역 변수:
final
로 선언된 지역 변수는 한 번만 값을 할당할 수 있다. 초기화 이후, 그 값은 변경될 수 없다. -
필드(멤버 변수): 객체의 필드에
final
을 사용하면, 객체가 생성될 때 필드를 초기화해야 하며, 그 이후에는 그 필드의 값을 변경할 수 없다. -
파라미터: 메서드의 파라미터를
final
로 선언하면, 메서드 안에서 파라미터의 값을 변경할 수 없다. 이는 메서드 안에서 파라미터가 참조하는 데이터의 무결성을 유지하는 데 도움이 된다.
B. 메서드에 final 사용
final
로 선언된 메서드는 하위 클래스에서오버라이드(override)
될 수 없다. 이를 통해, 상위 클래스의 기본 동작을 보존하고 변경되지 않게 한다.
C. 클래스에 final 사용
final
로 선언된 클래스는 다른 클래스가 상속할 수 없다. 즉,final
클래스는 확장될 수 없으며, 항상 기본 형태를 유지한다. 이는 보안과 불변성을 유지하는 데 유용하다.
D. 장점
-
불변성:
final
변수는 읽기 전용이 되므로, 애플리케이션의 실행 도중에 예상치 못한 변경으로부터 안전하다. -
스레드 안정성: 멀티스레드 환경에서
final
필드는 한 번 생성되고 초기화된 이후에는 변경되지 않으므로, 스레드 간에 안전하게 공유될 수 있다. -
성능 최적화: 컴파일러와
JVM
은final
키워드를 사용하는 요소에 대해 추가적인 최적화를 수행할 수 있다. -
설계 의도 명확화:
final
키워드는 코드를 읽는 사람에게 해당 요소가 변경되지 않을 것임을 명확하게 전달한다.
E. 불변 객체와의 차이점
final
변수는 변수의 재할당을 막지만, 객체의 내부 상태 변화는 막지 않는다. 반면, 불변 객체(Immutable Object)
는 객체가 생성된 후에는 그 상태가 절대로 변하지 않음을 보장한다. 둘 다 코드의 안정성과 예측 가능성을 높이는 데 기여하지만, 적용되는 범위와 의미가 다르다.
-
예를 들어,
final
로 선언된List
객체는 다른List
객체로 재할당될 수는 없지만, 리스트에 항목을 추가하거나 제거하는 것은 가능하다. -
불변 객체의 예로는
String
,Integer
등 Java의 표준 라이브러리에 포함된 클래스들이 있다. 이러한 객체들은 내부 상태를 변경하는 메소드를 제공하지 않는다.
4. Reference
None
댓글남기기