본문 바로가기
TIL

델리게이트(Delegate)와 이벤트(Event)

by vvin39 2025. 4. 16.

내일배움캠프 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

최근댓글

최근글

skin by © 2024 ttuttak