final
final 키워드는 변수, 메서드, 또는 클래스에 대한 변경 불가능 하도록 하는 데 사용된다.
final 키워드를 사용하면 그 요소는 한 번 할당되거나 정의된 후 변경될 수 없다.
변수에 final 사용
지역 변수
final로 선언된 지역 변수는 한 번만 값을 할당할 수 있다.
초기화 이후에는 그 값이 변경될 수 없다.
필드 (멤버 변수)
객체의 필드에 final을 사용하면 객체가 생성될 때 필드를 초기화해야 하며, 그 이후에는 그 필드의 값을 변경할 수 없다.
파라미터
메서드의 파라미터를 final로 선언하면, 메서드 안에서 파라미터의 값을 변경할 수 없다.
이는 메서드 안에서 파라미터가 참조하는 데이터의 무결성을 유지한다.
메서드에 final 사용
final로 선언된 메서드는 하위 클래스에서 오버라이드(override)될 수 없다.
이를 통해 상위 클래스의 기본 동작을 보존하고 변경되지 않게 한다.
클래스에 final 사용
final로 선언된 클래스는 다른 클래스가 상속할 수 없다.
즉, final 클래스는 확장될 수 없다.
final 사용 시 이점
불변성
final 변수는 읽기 전용이 되므로 애플리케이션의 실행 도중에 예상치 못한 변경으로부터 안전하다.
스레드 안정성
멀티스레드 환경에서 final 필드는 한 번 생성되고 초기화된 이후에는 변경되지 않으므로, 스레드 간에 안전하게 공유될 수 있다.
불변 객체와의 차이점
final 변수는 변수의 재할당을 막지만 객체의 내부 상태 변화는 막지 않는다.
반면, 불변 객체(Immutable Object)는 객체가 생성된 후에는 그 상태가 절대로 변하지 않음을 보장한다.
예를 들어, final로 선언된 List 객체는 다른 List 객체로 재할당될 수는 없지만 리스트에 항목을 추가하거나 제거하는 것은 가능하다.
'Dev > Java' 카테고리의 다른 글
다형성 (Polymorphism) (0) | 2024.10.30 |
---|---|
Gradle은 무엇인가? 의존성 관리는 왜 필요한가? (1) | 2024.10.25 |
static 변수와 static 메서드를 왜 쓸까? (0) | 2024.10.24 |
Java Virtual Machine & Runtime Data Areas (2) | 2024.10.23 |
Lombok은 어떤 원리로 동작할까? (0) | 2024.10.21 |