[아이템 83] 지연 초기화는 신중히 사용하라. 지연 초기화는 필드의 초기화 시점을 그 값이 처음 필요햔 시점까지 늦추는 것이다. 지연 초기화는 인스턴스 생성시 초기화 비용을 줄일 수 있지만, 지연 초기화하는 필드에 접근하는 비용은 커진다. 지연 초기화를 잘못사용하면 실제로 성능이 더 느려질 수도 있다. 멀티 스레드 환경에서 지연 초기화를 하기에는 까다롭다. 지연 초기화하는 필드를 둘 이상 스레드가 공유한다면 동기화해야 한다. 일반적으로 일반적인 초기화가 지연 초기화보다 낫다. 1 2 // 인스턴스 필드를 초기화하는 일반적인 방법 private final FieldType field = computerFieldValue(); 1 2 3 4 5 6 7 8 9 // 지연 초기화 - sychronized 방식 private FieldType field; private sychronized FieldType getField() { if (field == null) { field = computerFieldValue(); } return field; } 1 2 3 4 5 6 7 8 // 정적 필드용 지연 초기화 홀더 클래스 관용구 private static class FieldHolder { static final FieldType field = computerFieldValue(); } private static FieldType getField() { return FieldHolder....
10장 동시성
스레드는 여러 활동을 동시에 수행할 수 있게 해준다. 하지만 동시성 프로그래밍은 단일 스레드 프로그래밍보다 어렵다. 잘못된 수 있는 일이 늘어나고 문제를 재현하기도 어려워지기 때문이다. 그렇다고 동시성 프로그래밍으로부터 언제까지나 도망 다닐 수는 없다. 자바 플랫폼 자체에 내재되어 있을 뿐 아니라, 오늘날 어디서나 쓰이는 멀티코어 프로세서의 힘을 제대로 활용하려면 반드시 내 것으로 만들어야만 하는 기술익 때문이다. 그래서 이번 장에는 동시성 프로그램을 명확하고 정확하게 만들고 잘 문서화하는 데 도움이 도는 조언들을 담았다.