초기화 지연은 필드 초기화를 실제로 그 값이 쓰일 때까지 미루는 것이다. 값을 사용하는 곳이 없다면 필드는 결코 초기화되지 않을 것이다. 초기화 지연은 기본적으로 최적화 기법이지만, 객체 초기화 과정에서 발생하는 해로우 순환성을 해소하기 위해서도 사용된다. 


 초기화 지연 기법이 어울리는 곳이 따로 있다. 필드 사용 빈도가 낮고 초기화 비용이 높다면 쓸만할 것이다. 다중 스레드 환경에서 초기화 지연 기법을 구현하는 것은 까다롭다. 두 개 이상의 스레드가 그런 필드를 공유할 때는 반드시 적절한 동기화를 해주어야 한다. 


아래는 초기화 순환성 문제를 해소하기 위해서 동기화된 접근자를 사용한 초기화 기법이다.


 성능 문제 때문에 정적 필드 초기화를 지연시키고 싶을 때는 초기화 지연 담당 클래스 숙어를 사용하라. 

 또는 이중 검사 숙어를 사용하라. 이 숙어를 사용하면 초기화가 끝난 필드를 이용하기 위해 락을 걸어야 하는 비용을 없앨 수 있다.

이중 검사 숙어의 변종중에 여러번 초기화 되어도 상관없을 경우 사용하면 좋다.



요약

대부분의 필드 초기화는 지연시키지 않아야 한다. 더 좋은 성능을 내거나, 해로운 초기화 순환성을 제거할 목적으로 필드 초기화를 지연시키고자 할 때는, 적절한 초기화 지연 기술을 이용하라. 객체 필드에는 이중 검사 숙어를 적용하고, 정적 필드에는 초기호 ㅏ지연 담당 클래스 숙어를 적용하라. 여러번 초기화 되어도 상관없는 필드라면 단일 검사 숙어도 고려해볼만 하다.



+ Recent posts