youngfromnowhere
[Java] Singleton 패턴을 보고 든 의문, 무한 loop가 발생하지 않을까? 본문
singleton 패턴으로 작성된 class를 처음 봤을 때 든 의문이 있다.
class 정의의 body 안에 자기 자신의 instance를 만들면
그 instance 안에도 instance가 생성되고 그 안에도 생성되고.. 하면서
무한 loop가 발생하지 않을까? 하는 의문.
결론부터 말하자면 instance는 static제어자로 인해 static area에 단 한개 생성된다.
(외부에서 동적으로 객체를 생성하는 것은 생성자에 대한 접근을 private으로 제어하여
차단된다.)
그렇다면 일부러 무한 loop를 발생시킬 수 있을까?
MyClass는 body 안에서 자신의 instance를 생성하는데, 이 때 instance는 not-static이므로, MyClass의 instance인 c 내부에도 객체변수로서 c가 생성되고, 그 안에도 c가 생성되고 하면서 무한 loop를 돌게 된다. Main을 실행하면
무한 루프로 인해 정확한 에러메세지를 확인할 수 없었지만 어딘가에서 논리적으로 무한 루프가 돌고 있다는 것은 알 수 있다.
MyClass의 field를 모두 static으로 두면 위에서 말했듯이 c 라는 객체는 static area (method area)에 한번만 생성되기 때문에 무한 loop가 발생하지 않는다.
물론 MyClass.c.c.c(...)하는 식으로 객체 안의 객체 안의 객체(...)를 호출할 수는 있으나 모두 memory address가 같은 하나의 객체임을 확인할 수 있다.
'Java' 카테고리의 다른 글
[Java] Call-by-Value/Call-by-Address/Call-by-Reference (0) | 2022.12.05 |
---|---|
[Java] 의도한대로 작동하지 않은 clearScreen() (0) | 2022.11.30 |
[Java] Java compile. 디렉토리 설정 옵션 (0) | 2022.11.25 |
[Java] 수동 컴파일할 때, 소스코드 수정사항이 반영되지 않는 경우 (0) | 2022.11.25 |
[Java] Abstract Class 간단한 메모 (0) | 2022.11.18 |