final
상수와 static final
상수는 어떤 것일까? 사용하는 모두에게 같은 값이어야함. 값이 변하지 않아야 함. 왜 상수를 선언할 때 static final 키워드를 붙일까? static의 의미 static이 아닌 데이터들은 런타임 시점에 동적으로 메모리에 할당되는데 static 키워드가 붙은 데이터는 컴파일시점에 가비지컬렉터의 관리 밖인 static영역에 할당되므로 실행 직후부터 끝날때까지 쭉 유지됨 final의 의미 초기화를 한번만 허용한다는 의미. 즉, 한번 초기화되면 더 이상 초기화할 수 없다. 의문이 생겼던 부분 그럼 final만 붙어도 상수아닌가? 왜 static까지 붙여줘야 하지? final 만 있으면 모두에게 같은 값이라는 것을 보장할 수 없다! A와 B라는 사용자가 C변수에 final 키워드를 줬다고 해보자. 초기화 ..
final 키워드 헷갈리는 부분 정리
private final Map store = new HashMap();위와 같은 코드가 있다고 했을 때, store가 가리키는 실제 데이터들이 바뀌면 안된다고 잘못 생각하고 있었다. 원시 타입 변수의 경우 값이 스택에 저장되고, 객체 타입은 주소는 스택에 값은 힙에 저장된다. store가 무엇을 가리키는지 즉, 가리키는 주소가 바뀌면 안된다는 것이지 힙 안의 값이 바뀌는 것은 상관이 없다. 힙 안의 값도 불변이길 원한다면 Collections.unmodifiableMap() 를 이용해보자. final을 값이 변하지 않는다고 이해하지 말고, 한번만 할당할 수 있다고 이해하자.