델리게이트를 배운 강의를 봤을 때 새로운 코드를 보게 되었다.
public event Action onTakeDamage;
코드를 처음 봤을 때 Action 타입의 델리게이트를 선언한 것까지는 알았는데 앞에 붙은 event가 무었인지 궁금했다.
이벤트는 클래스에서 어떠한 상황이 발생했을 때 알림을 받기 위해 사용되는 매커니즘이다.
크게 이벤트 발생자와 이벤트 구독자로 나뉜다. 이벤트 발생자는 이벤트를 발생시키는 클래스이며 이벤트를 정의를 해야한다. 이벤트 구독자는 이벤트 발생에 대한 메서드를 담당하는 클래스이다.
이벤트는 접근제한자의 역할도 할 수 있는 데, 이벤트 구독자들은 이벤트에 대한 구독 및 구독 취소만 가능하며 이벤트 호출 및 할당은 불가하며 이는 이벤트를 정의한 클래스 내부에서만 가능하다.
이벤트 발생자 내부
public event Action onTakeDamage; => 이벤트 정의
onTakeDamage.Invoke(); => 이벤트 핸들러 호출
이벤트 구독자 클래스 내부
// 이벤트 구독
player.onTakeDamage += Damaged;
// 이벤트 구독 취소
player.onTakeDamage -= Damaged;
onTakeDamage.Invoke(); => 컴파일 오류
player.onTakeDamage = Damaged; => 컴파일 오류
// 이벤트를 정의한 이벤트 발생자에서만 가능