| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 추상 팩토리 패턴
- 게임 디자인 패턴
- Abstract Factory Pattern
- 스타일 지침
- MVP 패턴
- C#
- 구글플레이콘솔
- 상태 패턴
- New Input System
- Canvas Scaler
- event bus
- Dependency Injection
- 데이터 형식
- 오브젝트 풀
- Render Mode
- github desktop
- 프로젝트 생성
- 테이블 데이터
- 의존성 주입
- 유니티
- Unity 기술면접
- Di
- 개발
- 콘솔 앱
- Object Pool
- Visual Studio Installer
- unity
- 기술면접
- 구글 스프레드 시트
- 이벤트 버스
- Today
- Total
DevDino
[Unity 기술면접] C# 델리게이트(Delegate)와 이벤트(Event)의 차이점 본문
"C#에서 이벤트와 델리게이트의 차이는 무엇인가요?"
C# 델리게이트(Delegate)와 이벤트(Event)의 차이점
델리게이트(delegate)
델리게이트는 함수 포인터 또는 메서드 참조를 저장할 수 있는 타입입니다. 즉, 메서드 자체를 변수처럼 취급하여 저장하고 나중에 호출할 수 있도록 해줍니다.
public delegate void MyDelegate(string message);
특징
- 타입 안정성: 매개변수 타입과 반환 타입이 선언된 시그니처와 일치해야만 할당이 가능합니다.
- 런타임 유연성: 참조를 저장하기 때문에 런타임에 동적으로 메서드를 호출하거나 콜백(Callback)으로 전달할 수 있습니다.
- 멀티캐스트(Multicast): += 연산자를 통해 메서드를 하나의 delegate 인스턴스에 체인처럼 연결해 연속으로 호출할 수 있습니다.
- 최근에는 직접 델리게이트 타입을 선언하기보다, 제네릭으로 제공되는 System.Action(반환값이 없을 때)과 System.Func(반환값이 있을 때)를 주로 사용합니다.
사용하면 좋은 경우
콜백을 구현하거나, 런타임에 실행 흐름을 유연하게 교체하고 싶을 때 사용합니다.
이벤트(Event)
이벤트는 델리게이트 기반으로 만들어진 안전하고 캡슐화된 알림 매커니즘입니다.
특정 사건이 발생했을 때 이를 구독(Subscribe)한 객체들에게 신호를 보냅니다.
public event MyDelegate OnSomethingHappened;
특징
- 호출(Invoke) 권한의 캡슐화: delegate는 public으로 선언될 경우 외부 클래스에서 마음대로 호출해버릴 수 있는 위험이 있습니다. 반면 event 키워드를 붙이면, 해당 이벤트가 선언된 클래스 내부에서만 호출이 가능합니다.
- 구독/구독 해제만 허용: 외부 클래스에서 오직 +=(구독)와 -=(구독 해제) 연산만 접근할 수 있습니다.
사용하면 좋은 경우
객체 간 결합도(Coupling)를 낮추고 싶을 때
(예: 플레이어 캐릭터의 레벨이 올랐을 때, UI 매니저나 도감 시스템이 플레이어 스크립트를 직접 참조하지 않고 이벤트만 구독하여 각자의 UI를 갱신하도록 구성)
주의점: 메모리 누수(Memory Leak)
이벤트나 델리게이트를 사용할 때 가장 주의해야 할 점은 구독 해제입니다. 수명이 긴 싱글턴 매니저의 이벤트를 특정 UI 컴포넌트가 구독한 상태에서 UI 객체가 파괴(Destroy)될 경우, 델리게이트 내부에는 파괴된 객체의 메서드 참조가 그대로 남아있게 됩니다.
따라서 객체가 사라질 때 OnDisable이나 OnDestroy 생명주기에서 반드시 -= 연산자를 통해 구독을 해제해주어야 메모리 누수와 런타임 에러(NullReferenceException)를 방지할 수 있습니다.
요약
delegate는 메서드를 변수처럼 담아 런타임 유연성을 제공하는 기능이고, event는 delegate에 캡슐화와 접근 제어(안전성)를 더해 알림 메커니즘으로 쓰게 만든 구조입니다. 이를 통해 게임 내 다양한 시스템 간의 의존성을 줄이고 안전한 구조를 설계할 수 있습니다.
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] 객체지향 설계 5대 원칙(SOLID) (0) | 2026.07.14 |
|---|---|
| [Unity 기술면접] Unity 데이터 저장/불러오기 (0) | 2026.01.16 |
| [Unity 기술면접] Unity Input System (0) | 2026.01.14 |
| [Unity 기술면접] OnCollision vs OnTrigger (0) | 2026.01.12 |
| [Unity 기술면접] Unity Collider vs Rigidbody (1) | 2026.01.09 |