본문 바로가기
[ Unity ]/- 유니티 실습

유니티 싱글톤

by MRG 2024. 9. 8.
728x90
반응형

 

▣ 코드 설명
싱글톤 구현:
public static Player Instance { get; private set; }로 Instance라는 싱글톤 인스턴스를 만들고, Awake에서 인스턴스가 없는 경우 현재 객체를 할당하고, 중복된 객체는 삭제합니다. 이를 통해 Player 클래스는 오직 하나의 인스턴스만 생성되며, 이 인스턴스에 전역적으로 접근할 수 있습니다.


전역 접근: 다른 스크립트에서는 Player.Instance를 통해 언제든지 플레이어에 접근할 수 있습니다. 예를 들어, Enemy 클래스에서 Player.Instance.TakeDamage(10)을 호출해 플레이어에게 10만큼의 대미지를 입힐 수 있습니다.

인스턴스 관리: Awake 메서드에서 이미 Player 인스턴스가 존재할 경우 새로 생성된 객체는 파괴(Destroy(gameObject))됩니다. 이는 싱글톤 패턴의 중요한 부분으로, 인스턴스 중복을 방지합니다.

▣ 싱글톤 패턴의 장단점
장점:
전역 접근: 어디서든지 하나의 인스턴스에 쉽게 접근 가능.
중복 방지: 동일한 클래스의 여러 인스턴스를 만드는 것을 방지하여 메모리와 자원을 절약.
코드 간결화: 복잡한 객체 참조나 Find 메서드를 사용할 필요 없이, 클래스 이름으로 바로 접근 가능.


단점:
테스트 어려움: 싱글톤은 전역적으로 사용되기 때문에 유닛 테스트에서 다른 객체로 교체하기 어렵습니다.
의존성 증가: 모든 클래스가 싱글톤에 의존하게 되면 객체 간 결합도가 높아질 수 있습니다.

 

 

  { get; private set; }은 C#에서 자동 구현된 속성(Auto-Implemented Property)을 정의하는 문법입니다. 이 문법을 통해 특정 변수(필드)에 대한 읽기와 쓰기 권한을 제어할 수 있습니다.

get과 set에 대한 설명
get: 이 속성을 다른 클래스에서 읽을 수 있음을 의미합니다. 즉, PlayerManager.Instance로 다른 클래스에서 싱글톤 인스턴스를 읽을 수 있습니다.
private set: 이 속성의 값을 설정하는 부분은 클래스 내부에서만 가능하다는 뜻입니다. 즉, PlayerManager 클래스 내부에서만 Instance 값을 변경할 수 있으며, 외부 클래스에서는 값을 변경할 수 없습니다.
이를 통해 Instance는 외부에서 읽기 전용이지만, 내부에서는 수정할 수 있는 형태가 됩니다.

 

▣ 싱글톤 패턴 사용 시기
전역적으로 하나의 인스턴스만 필요할 때: 게임의 GameManager, AudioManager, UIManager 등은 보통 싱글톤으로 구현됩니다.
인스턴스 중복을 방지하고 싶을 때: 여러 객체를 생성할 필요 없이 하나의 인스턴스만 있어야 하는 경우 싱글톤이 적합합니다.

 

▣ 권장사항
외부에서 인스턴스를 변경할 수 없도록 private set을 유지하는 것이 싱글톤 패턴의 올바른 사용법입니다. 
필요한 속성만 public으로 제공: 싱글톤 인스턴스 자체가 아닌 특정 속성(예: health 등)을 외부에서 변경할 수 있게 하고, 인스턴스는 변경할 수 없도록 유지합니다.
메서드를 통해 변경: 싱글톤 인스턴스의 속성이나 동작을 외부에서 변경해야 한다면 메서드를 통해 제어합니다. 이렇게 하면 적절한 검증을 통해 잘못된 값이 할당되는 것을 방지할 수 있습니다.

 

 

https://docs.unity3d.com/2020.1/Documentation/ScriptReference/ScriptableSingleton_1.html

 

Unity - Scripting API: ScriptableSingleton<T0>

The ScriptableSingleton generic class allows you to create 'Manager' type classes in the Unity Editor. In classes that derive from ScriptableSingleton, serializable data you add survives assembly reloading in the Editor. Also, if the class uses the FilePat

docs.unity3d.com

 

728x90
반응형

'[ Unity ] > - 유니티 실습' 카테고리의 다른 글

유니티 2D 점프, 더블점프  (7) 2024.09.10
유니티 쿼터니언(Quaternion)과 회전  (3) 2024.09.09
유니티 3D ParticleSystem  (0) 2024.09.08
유니티 제네릭(Generic)  (1) 2024.09.07
유니티 SoundManager  (4) 2024.09.06

댓글