ClassLoader에서 초기화 하는 과정에서 궁금한 점이 있습니다.

미해결질문
정민석 프로필

강의를 통해 클래스의 static 변수등을 메소드 영역에 저장하는 순간이 '초기화' 과정에서 이뤄진다는 점을 알게 되었습니다. 그리고 관련해서 제가 예전에 공부했던 내용중에 궁금했던 점이 있어 질문 드리고 싶습니다!

예전에 Singleton객체에서 LazyHolder를 통한 방식을 공부하다가. ClassLoader이 지연타임로딩을 통해 클래스를 필요한 순간에만 로딩한다는 사실을 배웠었습니다.

public Class ExampleSingleton{

    private ExampleSingleton(){}

    public static ExampleSingleton get(){
       return LazyHolder.INSTANCE;

    }
   

    private static class LazyHolder{

        private static final INSTANCE = new ExampleSingleton();    

    }
}

위와같은 코드가 있을때 static으로 선언된 클래스는 ExampleSingleton클래스가 로드될때 같이 로딩되지 않고, 실제 LazyHolder클래스를 사용할때 로딩된다는 내용이었습니다.
하지만 static 변수는 ExampleSingleton클래스가 로드될때 메모리에 생성 하고, 왜 똑같이 내부에 static으로 선언된 LazyHolder클래스는 메모리에 올라가지 않는지 궁금합니다..! 

백기선 프로필
백기선 8달 전

말씀하신 "ClassLoader이 지연타임로딩을 통해 클래스를 필요한 순간에만 로딩한다는 사실"에 입각하면 LazyHolder 클래스가 사용될 시점에 로딩 되는것이 무엇이 이상한걸까요?

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스