youngfromnowhere

[Java] Singleton 패턴을 보고 든 의문, 무한 loop가 발생하지 않을까? 본문

Java

[Java] Singleton 패턴을 보고 든 의문, 무한 loop가 발생하지 않을까?

곽일땡 2022. 12. 8. 17:48

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가 같은 하나의 객체임을 확인할 수 있다.