-
Unity | 델리게이트를(delegate) 활용한 이벤트(Event System)다시한번 개발자도전! 2026. 2. 25. 09:46
1. 이벤트(event)란?
이벤트는 델리게이트를 기반으로 하지만, 객체지향의 캡슐화(Encapsulation)를 지키기 위해 접근 권한을 제한한 "특수한 대리자".
- 한 줄 요약: 외부에서는 구독(+=)과 해지(-=)만 가능하고, 실행(Invoke)은 오직 그 주인만 할 수 있게 만든 보안 장치임.
- 클래스 간의 결합도를 낮추기 위해 사용을 권장
2. 왜 이벤트를 사용하는지?
- 델리게이트만 쓰면 데이터 유실이나 권한 침해의 위험이 있음. 이때 event 키워드를 붙이면 유니티가 이 코드를 컴파일 에러로 막아줌.
public class SkillCaster : MonoBehaviour { public Action onSkillUsed; // 델리게이트 선언 } public class OtherClass : MonoBehaviour { void Start() { // 실수로 += 가 아니라 = 을 써버리면? caster.onSkillUsed = MyFunction; // 기존에 등록된 다른 모든 함수가 삭제 // 밖에서 맘대로 스킬 사용을 강제할수있음 caster.onSkillUsed.Invoke(); } }
3. 이벤트 사용방법
Step 1: 이벤트 선언
Action 앞에 event 키워드를 붙임.
public class PlayerStatus : MonoBehaviour { // 플레이어의 체력이 변했을 때 알리는 이벤트 public event Action<float> onHealthChanged; }Step 2: 이벤트 발생 (내부에서만)
외부에서 부를 수 없으므로, 내부 함수를 통해 실행함.
public void TakeDamage(float damage) { hp -= damage; onHealthChanged?.Invoke(hp); }Step 3: 이벤트 구독 (외부)
외부 클래스는 등록만 가함.
public class HealthUI : MonoBehaviour { void Start() { // += 로 구독 ( = 은 사용 불가) player.onHealthChanged += UpdateHeartUI; } void UpdateHeartUI(float currentHp) { // UI 갱신 로직 } }
4. 델리게이트 vs 이벤트 차이
특징 델리게이트 (Delegate / Action) 이벤트 (event) 대입 연산 (=) 가능 (기존 리스트 초기화 위험) 불가능 (오직 +=, -=만 가능) 외부 호출 (Invoke) 어디서든 가능 (보안 취약) 오직 선언된 클래스 내부에서만 가능 용도 콜백 함수, 데이터 가공 상태 변화 알림 (옵저버 패턴) '다시한번 개발자도전!' 카테고리의 다른 글
Unity | 제네릭(Generics) (0) 2026.03.04 Unity | 람다식(Lambda Expression) (0) 2026.03.03 Unity | 델리게이트(Delegate) (0) 2026.02.24 Unity | 유한상태머신(FSM, Finite State Machine)과 상태패턴(State Pattern) (0) 2026.02.23 Unity | BFS(너비우선 탐색) 와 DFS(깊이우선 탐색) (0) 2026.02.11