-
Notifications
You must be signed in to change notification settings - Fork 0
싱글턴 패턴 (Singleton pattern)
VG edited this page Jan 25, 2021
·
12 revisions
특정 클래스에 대해서 객체 인스턴스가 하나만 만들어질 수 있도록 해주는 패턴.출처: Head First Design Pattern
해당 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.출처: 위키백과
출처: 위키백과
싱글턴 적용 방법은 2가지가 있다.
public sealed class Singleton
{
public static Singleton Instance { get; } = new Singleton(); // 어플리케이션 시작과 동시에 초기화
private Singleton() { }
}
sealed
란?[1]
방법2 - 게으른 인스턴스 생성[2] (Lazy initialization)C#
public sealed class Singleton
{
private static volatile Singleton instance = null;
private Singleton() { }
public static Singleton getInstance() // (방법1)과 다르게 get메소드를 이용해 원할 때 객체를 생성하도록 함 (게으른 인스턴스 생성)
{
if (instance == null)
{
lock (typeof(Singleton)) // lock을 사용해 만일 멀티스레딩 호출로 인해, 객체가 두개이상 생기는 것을 방지
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
class Singleton : MonoBehaviour
{
public static Singleton Instance { get; private set; }
private void Awake()
{
if (Instance != null && Instance != this) {
Destroy(this.gameObject);
} else {
Instance = this;
}
}
}
Single Responsiblity Principle (단일 책임 원칙)
하나의 클래스는 하나의 책임만 가져야 한다.
싱글턴은 자신의 인스턴스를 관리하는(그리고 전역 접근을 제공하는)것 외에도 원래 그 인스턴스를 사용하고자하는 목적에 부합하는 작업을 책임져야 한다.
∴두가지를 책임지고 있다고 말할 수도 있다. 출처: Head First Design Pattern
하지만 싱글턴은 SRP를 위반함으로써 얻을 수 있는 이점이 더 크다
[1]클래스에 적용된 경우 sealed 한정자는 다른 클래스가 해당 클래스에서 상속하지 못하도록 합니다.출처: 마이크로소프트 [↺]
sealed
를 사용하면 얻을 수 있는 이점
- C# sealed 클래스의 함수는 오버라이드 되지 않음.
- 가상 함수 테이블 검사 과정을 생략.
- 가상 함수 테이블은 조회 시간이 상대적으로 짦음.
- callvirt 보다 속도에서 유리함.
출처: 코딩 기록
[2] 게으른 인스턴스 생성 이란? [↺]
방법1과 다르게 getter메소드를 이용해 원할 때 객체를 생성하도록 함
여러 출처를 바탕으로 최대한 오류를 범하지 않도록 작성하였으나, 이 페이지를 작성하는 저 또한 해당 학문을 공부하는 학생입니다.
∴해당 페이지의 정보를 맹신하지 마시길 바랍니다.
-
생성 패턴
-
구조 패턴
- 데코레이터 패턴 (Decorator pattern)
- 어댑터 패턴 (Adapter pattern)
- 퍼사드 패턴 (Facade pattern)
- 프록시 패턴 (Proxy pattern)
- 이터레이터, 컴포지트 패턴 (Iterator, Composite pattern)
-
동작 패턴
- 옵저버 패턴 (Observer pattern)
- 템플릿 메소드 패턴 (Template pattern)
- 커맨드 패턴 (Command pattern)
- 스트래티지 패턴 (Strategy pattern)
- 스테이트 패턴 (State pattern)
-
기타 패턴
- 컴파운드 패턴 (Compound pattern)
- 메소드 체이닝 (Method chaining)
- Dispose 패턴 (Dispose pattern)