싱글톤을 쓰면서 따로 블로그에 적어둔적이 없어서 추가했다.
싱글톤은 디자인패턴을 공부했더라면 알 단어인데,
객체의 인스턴스를 하나만 만드는 패턴이다.
싱글톤의 장점
인스턴스가 하나면 접근하기가 편리해진다.
여러 객체가 접근할 때 싱글톤으로 만들면 접근할 객체가 하나밖에 없기때문에 바로 접근이 가능하다.
그리고 고정된 메모리에 한번의 생성만 필요하니 메모리 절감도 된다.
하지만 다른 디자인패턴과 다르게 SOLID원칙중 위배되는 사항도 있는데,
DIP원칙, OCP원칙 등 위배되는게 있다.
그리고 테스트도 어려워진다는 단점이 있다.
실제로 싱글톤은 디자인패턴의 대표적인 패턴에 포함되지만
유니티에서 쓰는걸 혐오할정도로 싫어하는 사람도 많다.
물론 나는 적당히 쓰는건 언제나 좋다고 생각한다.
싱글톤
예전엔 싱글톤을 쓸 때 싱글톤이 필요한 클래스마다 일일이 써줬다.
하지만 이제는 제네릭으로 싱글톤을 정의해버리고, 상속받기만 하면 자동으로 싱글톤이 되는 방식으로 사용한다.
Singleton
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
instance = (T)FindObjectOfType(typeof(T));
if (instance == null)
{
var ob = new GameObject(typeof(T).Name, typeof(T));
instance = ob.GetComponent<T>();
}
return instance;
}
}
protected virtual void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
}
제네릭인 T타입으로 어떤 클래스든 상속받고 자기자신을 <>사이에 넣으면 된다.
사용예시
public class GameManager : Singleton<GameManager>
{
~~~
}
앞부분에 쓴 포스팅에 Singleton을 쓴부분이 몇개 더 있지싶다.
'유니티_일기 > 3D_RPG!' 카테고리의 다른 글
3D RPG 만들기! (9) 퀘스트 (0) | 2023.10.19 |
---|---|
3D RPG 만들기! (8) 인벤토리 만들기 (0) | 2023.10.19 |
3D RPG 만들기! (6) 몬스터+아이템 만들기 (0) | 2023.08.17 |
3D RPG 만들기! (5) 공격 만들기 - 레이어마스크, 애니메이션 레이어 (0) | 2023.08.09 |
3D RPG 만들기! (4) 대화 구현하기 (0) | 2023.08.07 |
댓글