지연초기화(lazy initialization)

지연초기화 특징

초기화 방법

일반적 초기화 예제

public class TestClass {
    private final Member member = createMember();

    private Member createMember() {
        return new Member("KJJ");
    }
}

인스턴스 필드의 지연초기화

public class TestClass {
    private Member member;

    public synchronized  Member getMember(){
        if(member==null){
            member = createMember();
        }
        return member;
    }
    private Member createMember() {
        return new Member("KJJ");
    }
}

지연 초기화가 초기화 순환성(initialization circularity) 을 깨뜨릴 것 같으면 synchronized 를 단 접근자를 사용하자

정적 필드용 지연 초기화 홀더 클래스 관용구

public class TestClass {

    static final private Member member = createMember();

    private static Member createMember() {
        System.out.println("init");
        return new Member("KJJ");
    }

    public static Member getMember(){
        return TestClass.member;
    }
}