문득 이런 생각이 들었다.
상수를 선언할 때 우리는 거의 명시적으로 private static final을 선언한다.
private final로 선언하면 되지 굳이 static을 선언하는 이유가 무엇일까?
결론은 초기화한 값을 끝까지 유지하기 위해서이다. -> 값을 불변으로 만들다.
만약 private final로 선언한다면 직접 적으로 값을 참조할 수는 없지만 생성자를 통해 값을 참조할 수 있다.
하지만 private static final의 경우에는 생성자를 통해 값을 참조할 수없다. (이때 private static final 변수는 무조건 초기화돼있어야 한다.)
즉 절대 해당 값을 바꾸지 않겠다는 표현과 유사하다.
https://jwdeveloper.tistory.com/163
private static final을 선언한 변수를 사용하면 재할당하지 못하며, 메모리에 한 번 올라가면 같은 값을 클래스 내부의 전체 필드, 메서드에서 공유한다.
private final을 선언한 변수를 사용하면 재할당하지 못하며, 해당 필드, 메서드 별로 호출할 때마다 새로이 값이 할당(인스턴스화)한다.
그렇다면 상수로 사용하려고 할 때, 그 값은 변하지 않을 것인데 호출할 때마다 새롭게 인스턴스 화할 필요가 없다. 한 번 메모리에 올려놓고 계속 같은 값을 가져다 쓰면 될 일이다.
객체 생성 시 private final 변수는 초기화가 가능하다.
public class StaticFinalExample {
private final int var;
public StaticFinalExample(int var) {
this.var = var;
}
}
private static 은 메모리에 올라가므로 초기화를 반드시 해주어야 한다.
그러므로 아래 코드는 초기화를 하지 않았기 때문에 컴파일 오류가 발생한다.
public class StaticFinalExample {
private static final int var;
public StaticFinalExample(int var) {
this.var = var;
}
}
'Java > Java' 카테고리의 다른 글
(JAVA) static keyword in java (0) | 2020.03.04 |
---|---|
(JAVA) 상속보다는 컴포지션을 사용하자 (0) | 2020.02.27 |
(JAVA) 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2020.02.20 |
(JAVA) The final keyword in Java (0) | 2020.02.11 |
(JAVA) 자바에서 hashCode의 사용 (0) | 2020.02.10 |