SW/디자인 패턴

싱글턴 디자인 패턴 : 정의, 개념, 구조 예시

얇은생각 2019. 10. 5. 07:30
반응형
싱글톤 디자인 패턴

의도
- 클래스에 인스턴스가 하나만 있는지 확인하고 글로벌 액세스 지점을 제공합니다.
- 캡슐화된 "지정한 시간에 초기화" 또는 "처음 사용시 초기화"



문제
- 응용 프로그램은 하나의 개체 인스턴스만 필요합니다. 또한 지연 초기화 및 전역 액세스가 필요합니다.



토론
단일 인스턴스 객체의 클래스를 생성, 초기화, 액세스 및 적용을 담당하도록 합니다. 인스턴스를 개인 정적 데이터 멤버로 선언하십시오. 모든 초기화 코드를 캡슐화하고 인스턴스에 대한 액세스를 제공하는 공개 정적 멤버 함수를 제공하십시오.

클라이언트는 단일 인스턴스에 대한 참조가 필요할 때마다 접근자 함수 (클래스 이름 및 범위 확인 연산자 사용)를 호출합니다.

다음 기준 중 세 가지가 모두 충족되는 경우에만 싱글톤을 고려해야합니다.

- 단일 인스턴스의 소유권을 합리적으로 할당 할 수 없다.
- 게으른 초기화가 바람직하다.
- 달리 글로벌 액세스는 제공되지 않는다.

단일 인스턴스의 소유권, 초기화 시기 및 방법 및 전역 액세스에 문제가 없는 경우 Singleton은 필요하지 않을 수 있습니다.

응용 프로그램 별 인스턴스 수에 대한 액세스를 지원하도록 싱글 톤 패턴을 확장 할 수 있습니다.

"정적 멤버 함수 접근 자" 방식은 Singleton 클래스의 서브 클래싱을 지원하지 않습니다. 서브 클래싱이 필요한 경우 다른 내용들을 참조하십시오.

Singleton 클래스 / 인스턴스를 삭제하는 것은 디자인 문제입니다. 



구조

싱글턴 디자인 패턴 : 정의, 개념, 구조 예시


단일 인스턴스의 클래스가 액세스 및 "처음 사용시 초기화"를 담당하게하십시오. 단일 인스턴스는 전용 정적 속성입니다. 접근자 함수는 공개 정적 메서드입니다.



예시
싱글톤 패턴은 클래스에 인스턴스가 하나만 있고 해당 인스턴스에 대한 글로벌 액세스 지점을 제공합니다. 단일 세트의 이름을 따서 명명되며, 이는 하나의 요소를 포함하는 세트로 정의됩니다. 미국 대통령의 사무실은 싱글톤입니다. 미국 헌법은 대통령의 선출 방법을 명시하고 임기를 제한하며 승계 순서를 정의합니다. 결과적으로 주어진 시간에 최대한 명의 활성 회장이 있을 수 있습니다. 현 대통령의 개인 신원에 관계없이 "미국 대통령"이라는 타이틀은 사무실에 있는 사람을 식별 할 수 있는 글로벌 액세스 지점입니다.



체크리스트
- "단일 인스턴스" 클래스에서 전용 정적 속성을 정의하십시오.
- 클래스에서 공개 정적 접근자 함수를 정의하십시오.
- 접근자 함수에서 "지연된 초기화" (처음 사용시 생성)를 수행하십시오.
- 모든 생성자를 보호 또는 개인으로 정의하십시오.
- 클라이언트는 접근자 기능만 사용하여 싱글톤을 조작 할 수 있습니다.



주요 규칙
- Abstract Factory, Builder 및 Prototype은 구현시 Singleton을 사용할 수 있습니다.
- 하나의 Facade 객체 만 필요하기 때문에 Facade 객체는 종종 Singleton입니다.
- 상태 객체는 종종 싱글 톤입니다.
- 전역 변수에 비해 Singleton의 장점은 Singleton을 사용할 때 인스턴스 수를 완전히 확신하고 여러 인스턴스를 관리 할 수 ​​있다는 것입니다.
- 싱글톤 디자인 패턴은 가장 부적절하게 사용되는 패턴 중 하나입니다. 싱글톤은 클래스가 정확히 하나의 인스턴스를 가져야 할 때 사용됩니다. 디자이너는 종종 전역 변수를 대체하려는 잘못된 시도에서 싱글 톤을 사용합니다. 싱글 톤은 의도와 목적이 있습니다.
- 싱글 톤은 언제 불필요합니까? 객체가 전역적으로 리소스에 액세스하도록 하지 않고 객체 리소스를 필요한 객체에 대한 참조로 객체 리소스를 전달하는 것이 더 간단한 경우 Singletons의 실제 문제는 객체의 적절한 가시성에 대해 신중하게 생각하지 않는 좋은 변명을 제공한다는 것입니다. 유연성을 유지하려면 물체에 대한 노출과 보호의 적절한 균형을 찾는 것이 중요합니다.
- 글로벌 데이터를 사용하는 습관이 나빴기 때문에 Singleton에 연구 그룹을 만들었습니다. Singletons가 어디에나 나타났으며 글로벌 데이터와 관련된 문제는 사라지지 않았습니다. 글로벌 데이터 질문에 대한 답은 "싱글톤으로 만들어라"는 것이 아닙니다. 답은 "왜 글로벌 데이터를 사용하고 있습니까?"입니다. 이름을 변경해도 문제가 변경되지 않습니다.


반응형