프로그래밍 연습하기

Singleton Pattern(싱글턴 패턴) 본문

디자인 패턴

Singleton Pattern(싱글턴 패턴)

john.k 2020. 8. 6. 22:10
반응형

싱글턴 패턴이란 해당 클래스의 인스턴스가 하나만 만들어지고,

어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다.

프로그램이 시작시에 생성되게 하지 않고 필요한 시기에 생성할 수도 있습니다.

 

싱글턴 패턴을 만들 때, private static으로 인스턴스를 저장합니다.

그리고 getInstance()를 구현하여 그 인스턴스가 있다면 그것을 반환하고, 없다면 새로 생성합니다.

이 과정이 멀티스레딩 상황에서 구현된다면, 자칫 인스턴스가 여러개 생성될 수 있습니다.

getInstance()에 synchronize 키워드를 사용함으로써 이 문제를 해결할 수 있습니다.

하지만 속도 저하 등의 문제가 있습니다.

 

이런 문제에 대응하는 방법이 세 가지 있습니다.

  • 그냥 Synchronize 키워드를 사용합니다. 성능이 그렇게 크게 중요하지 않은 경우입니다.
  • 인스턴스를 처음에 만듭니다.
  • DCL(Double Check Locking)을 써서 getInstance()에서 동기화되는 부분을 줄입니다. volatile 키워드를 사용해 메인메모리에 저장하고, 인스턴스가 null일때만 동기화로 생성합니다. 

 

 

 

참고 자료 - Head First Design Pattern

반응형

'디자인 패턴' 카테고리의 다른 글

팩토리 패턴  (0) 2020.08.06
Decorator Pattern(데코레이터 패턴)  (0) 2020.08.01
Observer Pattern(옵저버 패턴)  (0) 2020.07.30
Strategy Pattern(스트래티지 패턴)  (0) 2020.07.30
Comments