본문 바로가기
소프트웨어/디자인 패턴

[6] 싱글턴 패턴

by Riverandeye 2020. 11. 5.

싱글턴 패턴은 인스턴스가 하나 뿐인 특별한 객체를 만들고, 어디서든 접근할 수 있게 하기 위한 패턴입니다. 

 

유일무이한 객체

객체중에는 하나만 있으면 되는 것이 있습니다. 예를 들면

- 쓰레드 풀, 캐시, 디바이스 드라이버

- 대화 상자, 로그 기록용 객체

- 사용자 설정, 레지스트리 설정 등..

 

2개 이상인 경우 올바르게 동작하지 않거나 자원을 불필요하게 잡아먹게 되는 경우

객체를 2개 이상을 만들 수 없게끔 설정해주는 패턴이 필요합니다. 

싱글턴 패턴은 전역 변수처럼 어디서든 액세스 할 수 있으면서도

필요할 때만 객체를 생성하므로, 항상 상주하는 전역변수보다 더욱 좋은 패턴입니다.  

 

어떻게 만드나요?

아주 간단한 싱글턴을 만들어봅시다. 

export default class Singleton {
  private static singleton: Singleton;

  private constructor() {}

  public static getInstance() {
    if (!this.singleton) {
      this.singleton = new Singleton();
    }

    return this.singleton;
  }
}

Constructor를 Private으로 두어 외부에서 직접 생성자를 호출할 수 없게 하고

내부적으로 정의된 singleton을 리턴하게끔 합니다. 

만약 생성한 싱글톤이 있는 경우 새로 만든 후 리턴해주고, 그렇지 않은 경우엔 그냥 리턴해줍니다.

 

자바와 같은 멀티쓰레딩이 가능한 경우

초기 싱글턴을 생성할 때 getInstance가 동시에 호출되면 싱글턴이 2번 정의될 수 있습니다. 

그래서 이를 방지하기 위해 Synchronized 와 같은 키워드를 사용하는데요

꼭 그렇지 않아도 처음부터 선언할 때 생성자를 이용해서 도입해주면 됩니다.

'소프트웨어 > 디자인 패턴' 카테고리의 다른 글

[5] 팩토리 메소드 패턴  (0) 2020.10.29
[4] Decorator Pattern  (0) 2020.10.28
[3] Strategy Pattern  (2) 2020.10.25
[2] Observer Pattern  (0) 2020.10.22
[1] Reactor Pattern  (4) 2020.10.19

댓글