Closed taxol1203 closed 3 years ago
다수의 Class Loader로 구성된 JVM이 있을 수 있다고 합니다. 자바 코드로 싱글톤 패턴을 구현할 때, static 필드에 인스턴스를 담는데, 이 static 변수는 클래스 로드 타임에 결정된다고 교수님께서 한 번 말씀하신 적이 있습니다. 자바코드로 구현하는 싱글톤 패턴의 숨은 전제는 일반적인 상황에서 단 하나의 클래스 로더가 존재해 다수의 클래스 로더가 구성된 JVM의 경우에는 초기화가 여러 번 진행되어 static 필드가 단 하나가 아니게 되는 상황이 벌어지지 않을까 추측해봅니다.
추가 설명 필요하시면 더 찾아볼게요.
JVM에 여러 개의 Class Loader가 있긴 한데 한 JVM 안에 동일 기능을 하는 Class Loader가 여러 개 있지는 않은 것 같습니다. (System, Extension, Bootstrap 등이 있다고 하네요)
책에서는 서버 환경에서 싱글턴 패턴의 오브젝트가 여러 개 생길 수 있어 문제가 된다고 했는데, 다중 서버 환경을 구축할 경우 단일 서버 상에서는 싱글턴이 보장이 되지만 전체 시스템를 보면 싱글턴이어야 할 오브젝트가 여러 개가 됩니다.
저는 이런 내용으로 이해했어요 🤔
@kjsu0209
JVM에 여러 개의 Class Loader가 있긴 한데 한 JVM 안에 동일 기능을 하는 Class Loader가 여러 개 있지는 않은 것 같습니다. (System, Extension, Bootstrap 등이 있다고 하네요)
책에서는 서버 환경에서 싱글턴 패턴의 오브젝트가 여러 개 생길 수 있어 문제가 된다고 했는데, 다중 서버 환경을 구축할 경우 단일 서버 상에서는 싱글턴이 보장이 되지만 전체 시스템를 보면 싱글턴이어야 할 오브젝트가 여러 개가 됩니다.
저는 이런 내용으로 이해했어요 🤔
https://stackoverflow.com/questions/15156840/singleton-class-with-several-different-classloaders https://www.oracle.com/technical-resources/articles/java/singleton.html
아래 오라클 문서를 읽어보면 다중 서버에서 각 JVM에서 생기는 경우(답변에서 언급한 그 경우) 와 다수의 클래스 로더가 존재할 때도 싱글톤은 싱글톤이 아니게 되네요.
환상의 Java...🤪
108p. 첫번째 문단.
자바의 JVM 클래스 로더에 대해서 대충 읽어 보긴하였는데, 왜 서버의 클래스 로더마다, 싱글톤 클래스가 여러개의 오브젝트로 생성되는지 모르겠습니다