final 변수, 메서드, 클래스에 사용 가능, 변수에 final을 사용하면 그 변수는 재할당 할 수 없다. 메서드에 사용하면 오버라이드 될 수 없다. 클래스에 사용하면 상속 할 수 없다. 즉 final이라는 키워드를 사용하는 순간 독자적인 요소로 되어 부모 클래스가 될 수 없다.
즉 값을 한번만 설정하면 그 값을 다시 설정할 수 없다.
불변성 보장 : final 클래스를 사용할 시 불변성을 보장할 수 있다. 상태가 보존됨으로 변경되지 않기에 안정성과 보안을 향상
상속 방지 : final 클래스는 상속을 받을 수 없다, 그렇기에 특정 클래스에 대한 설계와 구현이 유지되어야 할 때 사용.
불변 클래스 생성 : 불변 객체를 만드는 데 유용, 불변 객체는 생성 후 변경되지 않음으로 프로그램의 신뢰성을 높일 수 있음.
성능 최적화 : final 클래스는 메소드가 오버라이딩 되지 않기에 컴파일 타임에 메소드 호출이 결정될 수 있어 실행시간이 단축될 수 있음.
final int n = 123; // final로 n이 123으로 고정되었기 때문에 값을 바꿀 수 없음
n = 456; // 컴파일 오류 발생
즉 final로 설정된 n이 재할당을 시도시에 컴파일 에럭 ㅏ발생함.
class Parent {
final void method() {
// ...
}
}
class Child extends Parent {
void method() {
// ...
}
부모 메서드에서 final을 사용할 경우 자식의 클래스에 부모의 메서드를 재정의 할 경우 컴파일 에러가 생긴다. 즉 오버라이딩을 할 수 없게 된다.
final class Parent {
//...
}
class Child extends Parent {
}
이렇게 클래스에 final을 사용하게 되면 상속할 수 없는 클래스가 된다.
본 final을 공부하고 글을 작성을 함으로서 final은 클래스, 변수, 메소드에 사용할 수 있다. final을 사용을 하면 그에 대핸 클래스는 상속 불가능, 변수는 재할당 불가능 메소드는 재정의 불가능. 이와 같이 독자적인 요소를 만들어내기에 다른 곳에서 수정이 불가능하여 보안성이 높아지고 성능을 최적화 시킬 수 있다.