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 필드는 한 번 생성되고 초기화된 이후에는 변경되지 않으므로, 스레드 간에 안전하게 공유될 수 있다.

  • 성능 최적화: 컴파일러와 JVMfinal 키워드를 사용하는 요소에 대해 추가적인 최적화를 수행할 수 있다.

  • 설계 의도 명확화: final 키워드는 코드를 읽는 사람에게 해당 요소가 변경되지 않을 것임을 명확하게 전달한다.

E. 불변 객체와의 차이점

final 변수는 변수의 재할당을 막지만, 객체의 내부 상태 변화는 막지 않는다. 반면, 불변 객체(Immutable Object)는 객체가 생성된 후에는 그 상태가 절대로 변하지 않음을 보장한다. 둘 다 코드의 안정성과 예측 가능성을 높이는 데 기여하지만, 적용되는 범위와 의미가 다르다.

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

  • 불변 객체의 예로는 String, Integer 등 Java의 표준 라이브러리에 포함된 클래스들이 있다. 이러한 객체들은 내부 상태를 변경하는 메소드를 제공하지 않는다.

4. Reference

None

태그:

카테고리:

업데이트:

댓글남기기