본문 바로가기
CS

[디자인패턴] Singleton pattern (싱글톤 패턴) 의 Java 코드구현 예시 - 단일 스레드 환경

by Warehaus 2022. 4. 5.

 

싱글톤 패턴의 목적

 

클래스에서 생성되는 인스턴스를 항상 하나로 유지할 수 있게 보장하기 위해 사용하는 패턴

 

 

 

싱글톤 패턴 코드

 

아래는 Java 를 이용한 가장 기본적인 싱글톤의 구현이다.

 

public class MySingleton {

    private static MySingleton ms;
    
    private MySingleton() {}
    
    public static MySingleton getInstance() {
    	if ( ms == null ) {
            ms = new MySingleton();
        }
        return ms;
    }
}

 

단일 스레드 환경에서는 위에 있는 코드를 사용해도 무리없이 동작한다.

다만, 다중 스레드 환경에서는 인스턴스를 저장하는 ms 가 null 임을 체크하는 과정에서 문제가 발생한다.

 

아래의 조건문을 여러 thread가 동시에 도달했다고 가정해 보자.

 

if ( ms == null )

 

개별 thread 는 모두 인스턴스가 없다고 생각 할 것이고, 마지막 접근한 스레드가 생성 한 인스턴스가 ms 에 저장 될 것이다. 

 

그렇기 때문에 위에 있는 코드는 다중 스레드 환경에서는 반드시 수정이 필요하다.