디자인 패턴
[디자인 패턴] 싱글톤 패턴
Janny_
2022. 10. 19. 09:39
싱글톤 패턴
애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴
즉, 싱글톤 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴합니다. 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있습니다.
단점으로는 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 객체 지향 설계 원칙 중 '개방-폐쇄 원칙' 이 위배됩니다. 결합도가 높아지게 되면, 유지보수가 힘들고 테스트도 원활하게 진행할 수 없다는 문제점이 발생할 수 있다는 것입니다
- Unity에서의 싱글톤 예시
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
protected static T _instance;
public static T instance
{
get
{
T obj = GameObject.FindObjectOfType<T>();
if (obj)
_instance = obj;
else if (_instance == null)
{
GameObject inst = new GameObject();
inst.name = typeof(T).Name;
_instance = inst.AddComponent<T>();
if (_instance is Singleton<T> singleton)
{
singleton.Init();
}
}
return _instance;
}
}
virtual public void Init()
{
}
}