싱글턴 패턴

- 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에대한 전역적인 접근점을 제공

- 쉽게 구현이 가능해서 자주 사용되는 디자인 패턴 중 하나로 계속 생성하여도 실제로 생성되는 객체는 하나가 됨

- 최초 이후에 호출된 생성자는 최초의 객체를 리턴 하는 방식

- 공통적으로 쓰이는 자원을 관리, 저장하는 객체를 만들 때 자주 사용 됨

예를들어 게임에서 PlayerObject 같은 단일 객체 일 경우 싱글턴 패턴을 사용하면 관리가 편해짐

 

싱글턴 패턴의 문제점은?

- 싱글턴 인스턴스가 너무 많은 일을 해서 많은 데이터를 공유시킬 경우

  다른 클래스의 인스턴스들 간의 결합도가 높아진다.

- 멀티스레드 환경에서 동기화 처리를 해줘야 한다. 동기화 처리를 하지 않으면

  인스턴스가 두 개 생기는 경우가 발생 할 수도 있다.

 

가장 기본적인 방법의 싱글턴

private 생성자와 GetInstance라는 함수를 통해서 자신을 반환하는 클래스

위의 코드에 대한 문제점은 메모리 관련 문제가 발생 한다.

일단 static 멤버이기 때문에 Data영역에 할당되고 메모리를 계속 잡고 있고 여기서 더 큰 문제는

다른 전역 객체의 생성자에게 참조 할 경우 문제가 발생 할 수도 안할 수도 있다.

이런 현상이 발생하는 이유는 c++에서는 전역인 객체들 생성 순서가 명확히 정해져있지 않아서 그렇다.

그래서 객체의 생성 시점을 변경을 해야 한다.

 

늦은 초기화 개념을 도입한 싱글턴

 

이 객체는 GetInstance()를 호출을 하게 되는 시점에 생성이 된다.

Static Pointer형인 instance를 새로 생성했기 때문에 동적메모리 할당이 이루어지고,

해제는 어떻게 할 것인가 생각하게 된다.

이런식으로 사용을 하게되면 자원을 효율적인 메모리와 함께 관리를 하게 된다.

늦은 초기화 개념에 대해서는 Effective C++(책) 또는 검색을 통해 확인해볼 수 있다.

 

+ Recent posts