인프런 커뮤니티 질문&답변

김현우님의 프로필 이미지
김현우

작성한 질문수

코딩으로 학습하는 GoF의 디자인 패턴

싱글톤 패턴 4부 - 안전하고 단순하게 구현하는 방법

싱글톤 생성 방법 중 enum 단점에 대해 질문있습니다.

작성

·

660

2

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요~
우선 이런 좋은 강의를 제공해주셔서 정말 감사합니다.
싱글톤 생성 방법 중 enum으로 생성했을 시에 단점 중에 lazy initialization이 안된다고 말씀하셨는데요, 이 부분에서 궁금증이 있어서 질문 남깁니다.
 
예제에서 보여주신 enum 내의 INSTANCE 또한 클래스로딩 시점에 JVM의 static 영역에 변수가 등록되고, SettingsHolder와 마찬가지로 호출시점에 힙영역이 할당되면서 그때, static 영역내 변수에 해당 힙주소가 참조되는것으로 알고 있습니다, 그렇다면 이 부분도 lazy initialization이라고 볼 수 있는것 아닌가요?
혹시 제가 잘못알고 있는 부분이 있다면 알려주시면 감사하겠습니다 ㅜ

답변 2

3

백기선님의 프로필 이미지
백기선
지식공유자

보통 "지연 초기화"는 클래스로딩 시점에 만드는게 아니라, 처음 해당 인스턴스를 요청할 때, 그 때 만들어 지는 걸 말하는데요. 말씀하신대로, enum은 클래스로딩 시점에 만들어지니까 지연 초기화가 아니라고 말씀드린겁니다. 하지만, 사실상 해당 enum을 클래스로딩만 하고 구체적인 타입을 쓰지 않는 경우(예, EnumSet.allOf(Difficulty.class);) 는 거의 없으니까, 크게 고민하지 않아도 되는 단점입니다.

사실 지연 초기화를 장점으로 취급하려면 그만큼 무거운 객체여야 하는데, 대부분의 경우에는 지연 초기화 기법이 필요 없는 경우가 많으니 그 점에 대해서 그렇게 크게 신경쓰지 않으셔도 됩니다.

0

김현우님의 프로필 이미지
김현우
질문자

친절한 답변 감사합니다.

김현우님의 프로필 이미지
김현우

작성한 질문수

질문하기