본문 바로가기
코딩/알고리즘

디자인 패턴 - 싱글톤(Singleton)

by 남대현 2022. 6. 26.
반응형

싱글톤(Singleton) 이란?

자기 자신을 static 형식으로 보유하고 있는 클래스로,
객체의 인스턴스가 오직 하나만 생성되는 디자인 패턴이다.

 

싱글톤의 기본 구조 - C++

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Singleton 
{
 
    private static Singleton instance = new Singleton();
    
 
    private Singleton() {}
 
    public static Singleton getInstance() 
     {
        return instance;
   }
}
cs

템플릿을 활용한 싱글톤 - Unity(C#)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Singleton<T> : MonoBehaviour where T : Component
{
    private static T instance;
 
    public static T Instance
    {
        get
        {
            if (instance == null)
            {
                instance = FindObjectOfType<T>();
 
                if (instance == null)
                {
                    GameObject gameObject = new GameObject("Controller");
                    instance = gameObject.AddComponent<T>();
                }
            }
            return instance;
        }
    }
 
    public void Awake()
    {
        DontDestroyOnLoad(gameObject);
 
        //as연산 : E as T -> E는 값을 반환하는 식이고, T는 형식 또는 형식 매개 변수의 이름입니다.
        if (instance == null)
            instance = this as T; 
        else
        {
            if (instance != this)
                Destroy(gameObject);
        }
    }
}
cs

 

싱글톤의 패턴의 장점

1. 클래스간의 데이터 공유가 쉽다.
전역변수의 역할을 하는 싱글톤이기 때문에 다른 클래스에서 접근하기가 용이하다.

2. 한번의 new로 인스턴스를 사용하기 때문에 메모리 효율이 좋다.

3. 어떤 상황에서든 강제적으로 단 하나만 존재한다.

 

싱글톤의 단점

1. 클래스간의 데이터 공유가 쉽다.
쉽게 접근이 가능하다는 뜻은 예기치 못한곳에서 접근을 할 수 있기 때문에 그 자체로 장점이자 단점이다.

2. 멀티쓰레드 환경에서 동시성 문제가 일어날 수 있다.
 동시성 문제 : 여러 스레드가 같은 메모리에 접근하는 현상으로, 중간에서 꼬여 다른 값이 나올 수 있다.

반응형

'코딩 > 알고리즘' 카테고리의 다른 글

디자인 패턴 - 컴포넌트 패턴 (Component)  (0) 2022.06.26
내적  (0) 2022.01.05
백트래킹(Backtracking) 알고리즘  (0) 2021.07.30
에라토스테네스의 체 알고리즘  (0) 2021.04.08
그리디(Greedy) 알고리즘  (0) 2021.04.06

댓글