JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[토비의 스프링] 1.6.1 클래스 로더에 따라 하나 이상의 오브젝트가 만들어진다. #69

Closed taxol1203 closed 3 years ago

taxol1203 commented 3 years ago

108p. 첫번째 문단.

서버에서 클래스 로더를 어떻게 구성하고 있느냐에 따라서 싱글톤 클래스임에도 하나 이상의 오브젝트가 만들어 질 수 있다.

자바의 JVM 클래스 로더에 대해서 대충 읽어 보긴하였는데, 왜 서버의 클래스 로더마다, 싱글톤 클래스가 여러개의 오브젝트로 생성되는지 모르겠습니다

daebalprime commented 3 years ago

다수의 Class Loader로 구성된 JVM이 있을 수 있다고 합니다. 자바 코드로 싱글톤 패턴을 구현할 때, static 필드에 인스턴스를 담는데, 이 static 변수는 클래스 로드 타임에 결정된다고 교수님께서 한 번 말씀하신 적이 있습니다. 자바코드로 구현하는 싱글톤 패턴의 숨은 전제는 일반적인 상황에서 단 하나의 클래스 로더가 존재해 다수의 클래스 로더가 구성된 JVM의 경우에는 초기화가 여러 번 진행되어 static 필드가 단 하나가 아니게 되는 상황이 벌어지지 않을까 추측해봅니다.

추가 설명 필요하시면 더 찾아볼게요.

kjsu0209 commented 3 years ago

JVM에 여러 개의 Class Loader가 있긴 한데 한 JVM 안에 동일 기능을 하는 Class Loader가 여러 개 있지는 않은 것 같습니다. (System, Extension, Bootstrap 등이 있다고 하네요)

책에서는 서버 환경에서 싱글턴 패턴의 오브젝트가 여러 개 생길 수 있어 문제가 된다고 했는데, 다중 서버 환경을 구축할 경우 단일 서버 상에서는 싱글턴이 보장이 되지만 전체 시스템를 보면 싱글턴이어야 할 오브젝트가 여러 개가 됩니다.

저는 이런 내용으로 이해했어요 🤔

daebalprime commented 3 years ago

@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...🤪