glenn-syj / more-effective-java

이펙티브 자바를 읽으며 자바를 더 효율적으로 공부합니다
4 stars 5 forks source link

[MEJ-001] 싱글턴 패턴에서 인스턴스의 생성과 파괴에 대한 질문 #14

Open FickleBoBo opened 8 months ago

FickleBoBo commented 8 months ago

정적 팩터리 메서드를 학습하면서 "자바에서 제공 중인 정적 팩터리 메서드에는 어떤 것이 있을까?"라는 고민을 하지 못했는데, 이에 List 자료형의 of() 메서드와 Integer Wrapper 클래스의 valueOf()를 예시로 들며 이해를 도운 점이 좋았습니다.

싱글턴 패턴의 개념과 특징에 대한 설명을 보며 싱글턴 패턴의 테스트 가능성 파트에서 상태를 가질 수 있고, 생성과 파괴 시기를 선택할 수 있다고 하셨는데, 이 부분이 이해하기 어려웠습니다.

저는 싱글턴 패턴으로 구현한 클래스는 단 하나의 인스턴스만 생성됨을 보장하므로, 하나뿐인 해당 인스턴스의 멤버(필드) 값이 곧 상태라고 생각했습니다. 이것이 맞게 이해한 것인지 궁금하며, 추가로 생성과 파괴 시기를 선택할 수 있다고 했는데, 저는 반대로 static으로 선언한 인스턴스는 컴파일 시점에서 메모리에 올라가며, 프로그램 종료 이후 파괴(Garbage Collector X)라고 생각해서 생성과 파괴 시기를 선택할 수 없는 단점을 갖는다고 생각했는데, 어떤 오개념을 갖고 있는지 궁금합니다.

clare-u commented 8 months ago

좋은 질문 감사드립니다! 저도 생성과 파괴 시 예시 코드를 보아야 이해가 가능할 것 같아서 다른 스터디원의 질문에 대답하며 코드를 찾아보았었는데요,

https://github.com/Glenn-syj/more-effective-java/issues/18#issuecomment-2017110475

Item 03과 04를 다시 읽다보니 이 코드도 비권장 코드 또는 오개념일 수 있을 것 같아 조금 더 찾아보려 합니다. 핫한 이슈가 되어버린 것 같은데 얼른 해결해 올 수 있도록 하겠습니다.