내일배움캠프 8일차 TIL
📌 델리게이트 & 이벤트
왜 두 개념을 같이 보는걸까?
델리게이트는 이벤트의 기반이기 때문!
- 델리게이트는 메서드를 참조할 수 있는 데이터 타입이고,
이벤트는 이 델리게이트를 기반으로 특정 동작이 일어났을 때 알림을 제공하는 메커니즘 - 즉, 이벤트는 델리게이트를 사용해서 특정 메서드를 호출하거나 처리할 수 있는 기능을 제공
이벤트는 델리게이트를 확장한 개념과 기능!
- 델리게이트를 사용해서 메서드를 실행할 수 있지만,
이벤트는 "이 메서드를 실행할 수 있게 해달라!"라고 구독/해지하는 방식으로
더 안전하고, 외부에서 직접 메서드를 호출할 수 없도록 제한을 둔다. - 델리게이트만 사용하면 외부에서 메서드를 쉽게 호출할 수 있지만,
이벤트는 구독된 코드만 호출할 수 있어 보안성이 더 높다. - 델리게이트는 단순히 메서드를 저장하거나 호출하는 용도로 사용되지만,
이벤트는 그 사용 범위를 객체 간의 통신으로 확장
구조가 유사해서 같이 설명되고 함!
- 델리게이트와 이벤트는 메서드를 호출하고 반응하는 방식에서 매우 유사
- 델리게이트는 메서드 참조 방식으로 이벤트를 처리할 수 있고,
이벤트는 그 메커니즘을 더 안전하고 유연한 방식으로 다루는 방법
델리게이트 (Delegate)
- 메서드를 참조할 수 있는 타입
- 메서드를 변수처럼 다룰 수 있음
- 콜백 함수나 실행 순서 조정, 메서드 리스트 호출 등 여러 메서드를 함께 처리할 때 사용
- 예시: 버튼 클릭 후 호출될 메서드 전달
public delegate void MyDelegate();
MyDelegate del = MyMethod;
del(); // MyMethod 실행
이벤트 (Event)
- 델리게이트를 이용한 안전한 알림 시스템
- 메서드를 외부에서 직접 호출할 수 없는 메커니즘
- 주로 UI 이벤트, 사용자 행동, 상태 변화 등을 처리할 때 사용
- +=로 구독하고 -=로 구독 해제
public event Action OnClick;
OnClick += ButtonClicked;
void ButtonClicked()
{
Debug.Log("버튼 눌림!");
}
델리게이트 vs 이벤트
| 항목 | 델리게이트 | 이벤트 |
| 호출방식 | 직접 호출 가능 | 외부에서 직접 호출 불가 |
| 주 용도 | 함수 전달/참조 | 상태 변화 알림/구독 |
| 접근성 | public으로 열면 누구나 호출 가능 | 외부에선 +=, -=만 가능 |
| 예시 | 콜백 함수, 메서드 참조 애니메이션 끝나고 다음 행동 실행 |
버튼 클릭, 게임 오버 이벤트 체력 0되면 사망 이벤트 발생 |
💡 느낀 점
- 처음에는 어떤 차이지? 싶었는데, 정리해보니 확실히 다르게 느껴졌다.
델리게이트는 메서드 리스트를 들고 다닐 수 있는 컨테이너 같고, 이벤트는 그것에 접근 제한을 둔 안전한 알림 시스템이라는 걸 알게 되었다. - 게임 만들 때, 예를 들면 체력이 0되면 자동으로 게임 오버 화면 띄우고 싶을 때
델리게이트로도 되지만 이벤트로 처리하면 휄씬 안정적이고 유지보수가 쉽겠다는 생각!
.
❗ 기억하고 싶은 것
- 델리게이트는 메서드의 전화번호부 → “이 번호로 전화해” 느낌
(메서드를 저장하고 나중에 호출) - 이벤트는 벨이 울릴 때만 통화되는 초인종 시스템
→ “벨이 울려야 너랑 연결돼” 느낌
→ 발신자는 호출, 수신자는 구독
(델리게이트에 안전장치를 붙인 느낌) - 델리게이트는 기능, 이벤트는 구조
- UI나 게임 상태처럼 "무언가 발생했을 때" 처리하고 싶으면 무조건 이벤트!
- Unity에서 Button.onClick 같은 UI 이벤트가 바로 이벤트 시스템의 대표 예

'TIL' 카테고리의 다른 글
| 오버로딩과 오버라이딩 (0) | 2025.04.18 |
|---|---|
| 이름 입력 흐름 제어.. (2) | 2025.04.17 |
| 인터페이스 vs 추상 클래스 (0) | 2025.04.15 |
| 구조체(struct) vs 클래스(class) (0) | 2025.04.14 |
| 내일배움캠프 5일차 TIL (0) | 2025.04.11 |