Tech Collection

[Design Pattern] Signleton Pattern 본문

Concept/Design Pattern

[Design Pattern] Signleton Pattern

eee_269 2021. 5. 30. 21:12
728x90
반응형

싱글톤 패턴

  • 해당 클래스의 인스턴스가 최대 한 개까지만 만들어진다.
  • 유일한 인스턴스를 어디서든지 접근할 수 있도록 할 수 있다.
  • Java에서는 private 생성자와 정적메소드, 정적 변수를 사용

Singleton Pattern 형식

public class Test {
	// 정적 변수
	private static Test t;
	// private 생성자
	private Test() {  }
	// 정적 메소드
	public static Test getInstance() {
		if(t == null) {
			t = new Test();
		}
	return t;
	}
}
  • 다중 스레드를 사용하는 어플리케이션에서는 속도와 자원 문제를 파악해보고 적절한 구현법을 사용해야 한다.
    DCL (Double-Checking Locking) 을 써서 getInstance()에서 동기화되는 부분을 줄인다.
public class Test {
	private volatile static Test t;
	private Test() {  }
	public static Test getInstance() {
		if(t == null) {
			synchronized (Test.class) {
				if(t == null) {
					t = new Test();
				}
			}
		}
	return t;
	}
}
  • volatile
    • 멀티스레드를 사용하더라도 정적 변수가 Singleton 인스턴스로 초기화되는 과정이 올바르게 진행될 수 있도록 할 수 있다.
  • getInstance() 메소드:
    • 인스턴스가 있는지 확인하고, 없으면 동기화
    • → 처음에만 동기화 진행
    • 동기화 후에도 다시 한 번 변수가 null인지 확인한 다음 인스턴스를 생성
728x90
반응형

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

[Design Pattern] Decorator Pattern  (0) 2021.05.30
[Design Pattern] Factory Pattern  (0) 2021.05.30
[Design Pattern] Observer Pattern  (0) 2021.05.30
[Design Pattern] Strategy Pattern  (0) 2021.05.30
[Design Pattern] 디자인 패턴이란?  (0) 2021.05.26