▣ 코드 설명
싱글톤 구현:
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 ] > - 유니티 실습' 카테고리의 다른 글
유니티 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 |
댓글