- final 키워드
: java에서 final 키워드는 여러 constant에서 단 한 번만 할당 될 수 있는 entity를 정의할때 사용됨
: 개발 의도는 반드시 본 변수, 함수, 클래스는 final로 제한되어야 함을 보여줌.
: 클래스와 메소드를 제한함으로써 Override로 인한 실수를 최소화 하고 버그를 줄이기 위해 선언함
: 코드 가독성을 위해서 씀
: final은 Immutable/Read-only 속성을 선언하는 지시어.
- Final classes
fianl class FinalClass{
...
}
// 컴파일 오류, 상속 받을 수 없음
class TestClass extends FinalClass{
...
}
: final 지시어를 통해 클래스 상속을 제한함
- Final methods
public class FinalClass {
public void A1() {...}
public final void A2() {...}
public static void B1() {...}
public static final void B2() {...}
}
public class TestClass extends FinalClass {
public void A1() {...} // 오버라이딩 가능
public void A2() {...} // 불가능
public static void B1() {...} // 오버라이딩 가능
public static void B2() {...} // 불가능
}
: final 지시어를 통해 메소드 오버라이드를 제한함
- Final variables
public class FinalClass {
final int AAAA = 10; // 상수 정의, 10으로 고정
void test() {
int[] intArray = new int[AAAA]; // 상수 활용
AAAA = 50; // 컴파일 오류, final 필드 값은 상수으므로 변경할 수 없다.
}
}
: final 지시어를 이용해 Immutable 선언함
+) 프로그램 전체에서 공유할때
: static + final 키워드
: static을 안 넣을 경우 인스턴트가 만들어 질때 마다 메모리를 잡고 초기화를 시키기 때문
: 꼭 final을 쓰면 static을 넣는게 아님! 인스턴트를 생성하고 한 번만 초기화 하고 쭉 변화없이 쓸 내용이면 가능
: DI(Dependency Injection) 기법을 이용해 클래스 내부에 외부 클래스 의존성을 집어넣는 경우임.
참고
https://blog.lulab.net/programming-java/java-final-when-should-i-use-it/
https://advenoh.tistory.com/13
https://gmlwjd9405.github.io/2018/08/06/java-final.html