일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 알고리즘
- pintos
- 알고리즘수업-너비우선탐색2
- c#
- 크래프톤정글
- 전쟁-전투
- 다익스트라
- 연결리스트
- 티스토리챌린지
- 네트워크
- KRAFTON JUNGLE
- anonymous page
- C
- Unity
- 4기
- 이벤트 함수 실행 순서
- 크래프톤 정글
- 오블완
- 유니티
- User Stack
- BFS
- 핀토스
- 파이썬
- 추상클래스와인터페이스
- project3
- 크래프톤정글4기
- 크래프톤 정글 4기
- kraftonjungle
- TiL
- Today
- Total
말감로그
[Unity] 싱글톤 패턴 본문
싱글톤 패턴
싱글톤 패턴은 디자인 패턴 중 하나로, 해당 클래스의 인스턴스가 언제나 하나만 존재하도록 보장(유일성)하는 패턴입니다. 이 패턴은 주로 하나의 인스턴스만 필요한 객체에 적용된다.
외부에서 생성자를 이용한 객체 생성을 막아 전역적으로 접근할 수 있는 정적 메서드를 통해 해당 인스턴스에 접근하고 사용한다. 모든 스크립트가 써야 하는 변수나 기능을 관장하는 스크립트가 있다면, 접근의 편의와 메모리의 할당을 줄이기 위해 싱글톤 패턴을 사용한다. 예를 들어, 게임 매니저나 리소스 관리자 등이 여기에 속한다.
단점
- 전역변수가 가지는 모든 단점을 그대로 갖게 된다. 전역 변수는 가장 마지막에 검색되기 때문에 조금 느릴 수 있으며, 유지보수가 조금 힘들어질 수 있다.
using UnityEngine;
public class DataManager : MonoBehaviour
{
private static DataManager instance = null;
// 싱글톤 인스턴스에 접근할 수 있는 정적 프로퍼티
public static DataManager Instance
{
get
{
if (instance == null)
{
return null;
}
return instance;
}
}
private void Awake()
{
if (instance == null)
{
// 인스턴스가 없으면 이 객체를 싱글톤 인스턴스로 설정
instance = this;
}
else
{
// 이미 인스턴스가 있다면 이 객체를 파괴(유일성 보장)
Destroy(this.gameObject);
}
//씬 전환되어도 유지되도록 설정
DontDestroyOnLoad(this.gameObject);
}
보안 상 private으로 스크립트의 instance를 생성한다 그러면 어떻게 외부에서 접근할 수 있는것인가?
전역적으로 접근할 수 있도록 정적 메소드/프로퍼티를 생성하여 접근하면 된다.
그리고 static을 사용했기에 어느 스크립트든 DataManager.instance.원하는 함수() 를 입력해주기만 하면 사용이 가능하다.
따라서 싱글톤은 전역에서 접근이 가능하기에 원하는 스크립트에서 불러와서 마음대로 사용이 가능하다. 그래서 주로 게임의 전체를 관장하는 스크립트에 싱글톤을 사용한다.
또한 public으로 매 스크립트마다 연결하는 것은 메모리의 사용이 스크립트의 수의 배수만큼 증가하지만, 싱글톤을 사용하면 한 메모리의 할당만으로 원하는 스크립트의 기능을 가져올 수 있기에 자주 쓰는 스크립트의 경우 메모리의 사용을 크게 줄일 수 있다.
<참고>
'Unity' 카테고리의 다른 글
[Unity] 시네머신으로 카메라 이동 제한하기 (1) | 2024.12.25 |
---|---|
[Unity] Device Simulator (디바이스 시뮬레이터) (0) | 2024.12.23 |
[Unity] 유니티 이벤트 함수의 실행 순서 (0) | 2024.07.12 |
[Unity] Mathf.Sign() 부호 반환 함수 (2) | 2024.06.27 |
Unity Cinemachine (0) | 2024.04.20 |