Final 키워드는 엔티티를 한번만 할당한다. 즉, 두번 이상 할당하려 할 때 컴파일 오류가 발생하게 됌.
Final classes
public final class MyFinalClass {...}
public class ThisIsWrong extends MyFinalClass {...} // forbidden
Final class는 final 지시어를 통해 클래스 상속을 제한한다.
Final methods
public class Base {
public void m1() {...}
public final void m2() {...}
public static void m3() {...}
public static final void m4() {...}
}
public class Derived extends Base {
public void m1() {...} // OK, overriding Base#m1()
public void m2() {...} // forbidden
public static void m3() {...} // OK, hiding Base#m3()
public static void m4() {...} // forbidden
}
Final methods는 final 지시어를 통해 메소드 오버라이드를 제한한다.
Final variables
final long ONE_MINUTE = 60000;
Final variables는 final 지시어를 이용해 immutable 선언
변수에 final 지시어를 이용하면, 한 번 값을 선언한 뒤 변하지 않는 Read-only 성격을 가진다고 생각하면 된다.
Interface에서의 final
- interface에서 정의한 변수는 기본적으로 final 변수이다
- interface에서 Method는 final로 선언할 수 없다. (인터페이스는 구현체들이 사용하기 위한 용도이므로 당연한 것)
final의 특징을 간단하게 살펴 봤는데, 내가 직접 사용해본 적은 많이 없는것 같다.
그나마 immutable한 변수들을 정의하기 위해 class, variable에서 적용은 해봤지만 함수에서 사용하는 것은 아직 본적이 없다.
개인 프로젝트를 할때는 크게 중요하지 않는 개념이지만, 개발자들과의 협업에서는 final을 통해 의도를 파악할 수 있다는게 가장 큰 장점인 것 같다.
'백엔드 > Java' 카테고리의 다른 글
조회수 카운트 동시성 이슈 정리 (0) | 2023.11.19 |
---|---|
java.util.Date와 java.sql.Date 차이 (0) | 2019.12.17 |
Comparable, Comparator 인터페이스 차이 (0) | 2019.02.25 |
다형성 & Upcasting & Downcasting (0) | 2018.11.10 |