final 클래스
- final 클래스는 다른 클래스가 그것을 상속받을 수 없게 하는 클래스이다.
- final 키워드를 클래스 선언에 추가함으로써, 해당 클래스는 최종적이며 변경할 수 없다는 것을 의미한다.
fianl 클래스의 필요성
- 불변성 보장
- final 클래스를 사용하면 클래스의 불변성을 보장할 수 있다.
- 이는 클래스가 일단 생성되면 그 상태가 변경되지 않도록 함으로써, 안정성과 보안을 향상시킨다.
- 상속 방지
- final 클래스는 상속을 받을 수 없다.
- 이는 특정 클래스의 설계와 구현이 그대로 유지되어야 할 때 중요하다.
- 예를 들어, 특정 클래스의 기능이나 로직이 변경되지 않도록 유지하고 싶을 때 final을 사용한다.
- 불변 클래스 생성
- final 클래스는 불변 객체를 만드는 데 유용하다.
- 불변 객체는 생성 후 그 상태가 변경되지 않으므로, 여러 면에서 프로그램의 신뢰성을 높일 수 있다.
- 성능 최적화
- 컴파일러와 JVM(Java Virtual Machine)은 final 클래스에 대해 성능 최적화를 수행할 수 있다.
- final 클래스의 메서드는 오버라이딩되지 않기 때문에, 컴파일 타임에 메소드 호출이 결정될 수 있어, 실행 시간이 단축될 수 있다.
final 클래스의 특성
- 확장 불가능
- 다른 클래스는 final 클래스를 상속받을 수 없다.
- 이는 final 클래스의 모든 메서드가 상속되거나 오버라이딩될 수 없음을 의미한다.
- 메서드 오버라이딩 방지
- final 클래스 내의 모든 메서드는 자동으로 final으로 간주된다.
- 따라서, 이 메서드들은 하위 클래스에서 오버라이딩될 수 없다.
final 필드
- final 필드는 한 번 초기화되면 그 값을 변경할 수 없는 필드를 의미한다.
- 이러한 필드는 상수를 정의하거나, 객체의 불변성을 보장하는 데 사용된다.
final 필드의 필요성
- 상수 정의
- final 필드는 변경되지 않는 고정된 값을 가진 상수를 정의하는 데 사용된다.
- 예를 들어, 수학적 상수나 설정 값 등 프로그램 전반에 걸쳐 일관되게 사용되어야 하는 값들을 final 필드로 정의할 수 있다.
- 불변 객체 생성
- 객체의 불변성을 보장하려면, 객체가 생성된 후에는 그 상태가 변경되지 않도록 해야 한다.
- final 필드를 사용하면 객체의 핵심 속성이 한 번 설정된 후에는 변경되지 않도록 할 수 있으며, 이는 객체의 예측 가능성과 신뢰성을 높인다.
- 스레드 안전성
- 멀티스레딩 환경에서 final 필드는 스레드 간의 안전한 읽기 작업을 보장한다.
- 한 번 초기화된 final 필드의 값은 변경되지 않으므로, 스레드 간에 동기화 없이 안전하게 읽을 수 있다.
- 메모리 가시성 보장
- final 필드는 객체가 생성될 때 한 번만 쓰여지고, 이후에는 변경되지 않기 때문에, JVM은 메모리 가시성을 보장한다.
- 즉, final 필드의 값은 모든 스레드에게 일관되게 보여진다.
final 필드의 특성
- 초기화 제한
- final 필드는 선언 시 또는 생성자에서만 초기화할 수 있다.
- 일단 final 필드에 값이 할당되면, 그 필드는 더 이상 새로운 값으로 변경할 수 없다.
- 객체의 핵심 속성 보호
- 객체가 특정한 상태를 유지해야할 때, 예를 들어 설정 값이나 중요한 데이터를 final 필드로 선언함으로써, 해당 값의 무결성을 유지할 수 있다.
final 메서드
- final 메서드는 한 번 선언되면 하위 클래스에서 오버라이딩할 수 없다.
- 이러한 메서드는 클래스의 핵심적인 기능을 안정적으로 유지하기 위해 사용된다.
final 메서드의 필요성
- 메서드의 무결성 보장
- final 메서드는 변경되거나 재정의될 수 없다.
- 이는 특정 메서드의 기능이 그대로 유지되어야 할 때 중요하다. 특히, 클래스의 기본 동작을 정의하는 핵심 메서드들에서 이러한 성질이 필요하다.
- 오버라이딩 방지
- final 로 선언된 메서드는 하위 클래스에서 오버라이딩될 수 없다.
- 이는 부모 클래스의 중요한 메서드가 자식 클래스에서 예기치 않게 변경되는 것을 방지한다.
- 이러한 특성은 클래스의 동작을 일관되게 유지하는 데 도움이 된다.
- 보안 강화
- 보안이 중요한 메서드를 final 로 선언함으로써, 외부에서 해당 메서드를 변경하거나 악용하는 것을 방지할 수 있다.
- 이는 프로그램의 보안 수준을 향상시키는 데 기여한다.
- 예측 가능한 동작
- final 메서드는 프로그램의 동작을 예측 가능하게 만든다.
- 개발자는 final 메서드가 항상 동일한 방식으로 동작한다는 것을 알고 있으므로, 의도치 않은 오류나 버그를 줄일 수 있다.
final 메서드의 특성
- 재정의 불가능
- final 메서드는 상속받은 클래스에서 다시 정의할 수 없다.
- 이는 메서드의 원래 기능과 동작이 보존됨을 의미한다.
- 클래스의 동작 보호
- 특정 클래스의 핵심적인 동작이나 로직이 final 메서드에 의해 정의되면, 이러한 동작이나 로직은 상속받은 클래스에서 변경되지 않는다.
'☕ JAVA' 카테고리의 다른 글
[Java] 템플릿 메서드 패턴(Template Method Pattern) (0) | 2024.05.31 |
---|---|
[Java] 추상 클래스(abstract class), 추상 메서드(abstract method) (0) | 2024.05.30 |
[Java] 매개 변수의 다형성 (0) | 2024.05.30 |
[Java] 참조 변수의 형 변환과 instanceof (0) | 2024.05.28 |
[Java] 다형성(polymorphism) (0) | 2024.05.27 |