본문 바로가기

Design Pattern

Design Pattern - 싱글톤 구현하기

# 네이버블로그에서 이사 (2012.11.07 게시물. http://blog.naver.com/rkdmfql1540) 


이 컨셉은 다음과 같은 시스템에서 일반적으로 사용된다.

1. 오직 하나의 객체가 존재하는 것이 더 효과적일 때

2. 일정 개수의 객체만 생성하도록 제한을 둬야할 때


싱글톤 패턴을 사용함에 있어서 비판적인 시각도 있는데, 일부에서는 싱글톤이 남용되고 있거나 굳이 하나의 유일한 객체가 필요한 상황이 아닌 곳에서도 불필요하게 도입될 수도 있고, 애플리케이션 안에서 전역 상태(global state)를 도입한다고 판단하기 때문에 안티패턴(자주 사용되기는 하나 효과적이지 못하거나 부작용이 낳는 패턴)으로 간주하기도한다.


싱글톤의 구현방법은 3가지 주된 방법이 있다.

 

1. 이 방법은 해당 클래스의 생성자를 private로 설정해 밖에서 객체를 생성하지 못하게 하고 getInstance라는 static 메소드를 통해 오직 객체가 한번만 생성되고 개속 재활용을 하는 방법이다.

public class Singleton {

	private static Singleton instance = null;

	private Singleton() {}

	public static synchronized Singleton getInstance() {

		if (instance == null) {

			instance = new Singleton();

		}

		return instance;

	}

}



2. 프로그램 초기에 싱글톤 객체가 생성 필요가 있거나 다른 스태틱 멤버나 스태틱 메서드가 없을시 사용하면 쉽게 사용 할 수 있다.
public class Singleton {
	private static final Singleton instance = new Singleton();
	private Singleton() {}
	public static synchronized Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}


3. 자바 열거형을 이용한 싱글톤

public메서드는 필요한 타입의 인자를 사용하는데 쓰일 수 있다. ; 여기에서는 String 인자가 사용됐다.

이 접근법은 자바의 enum 값이 자바 프로그램 내에서 오직 한번만 인스턴스화 되는 점을 이용함으로써 싱글톤을 구현한다. 자바의 enum 값은 전역적으로 접근 가능하기 때문에, 이는 싱글톤이다.

이는 가장 좋은 방법이라 한다.

public enum Singleton {
	INSTANCE;
	public void execute(String arg){

	}
}


'Design Pattern' 카테고리의 다른 글

Degine Pattern - StatePattern  (0) 2014.11.13