더북(TheBook)

코드 4-1의 주석 1에서 싱글톤 생성 여부를 확인한 다음 싱글톤이 없으면 새로 만들고 그렇지 않으면 getInstance() 메서드로 생성한 인스턴스를 그대로 반환합니다. 그 다음부턴 getInstance() 메서드를 아무리 많이 호출해도 최초 생성한 MySingleton 객체 인스턴스를 돌려줍니다. 코드 4-1은 언뜻 별문제가 없는 코드처럼 보이지만 실은 오류가 내재된 불안정한 코드입니다. 객체를 생성하는 메서드의 원자성(atomic)이 결여된 탓에 경합 조건이 발생하면 에러가 날 소지가 있으니까요. 멀티스레드 환경에서 이 코드를 실행하면 싱글톤 인스턴스가 2개 이상 만들어질 수 있습니다.

코드 4-1 간단히 구현한 싱글톤 패턴

package com.devchronicles.singleton;
 
public class MySingleton {
private static MySingleton instance;
 
private MySingleton() {}
 
public static MySingleton getInstance() {
    if (instance == null){ // 1
        instance = new MySingleton();
        }
        return instance;
}
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.