함수를 보관할 수 있는 타입
상용자 정의 대리자를 만들수도 있지만 System.Action 혹은 System.Func 혹은 UnityAction을 사용한다
Invoke() 메소드로 보관된 모든 함수를 호출할 수 있다.
옵저버 패턴을 쉽게 사용하기 위한 타입
선언된 대리자 타입의 함수를 보관할 수 있다.
대리자와 다르게 외부에서 Invoke()를 할 수 없다.
함수가 중복되어 추가 된다면 디버깅이 매우 어렵기 때문에 꼭 추가 전에는 삭제를 해준다.
이벤트 객체에 아무런 함수도 없는 경우에는 null이기 때문에 Invoke()를 호출할 때는 꼭 Null 체크를 해준다.
> Ex. OnTakenDamage?.Invoke();
활용 방법은 'Event'의 의미대로 특정 사건(혹은 시점)을 나타내며, 그 시점에 일어나야 하는 일들(코드상에서는 메소드로 표현)을 일어나게 할 수 있다.
주의 사항
public event Action OnTakenDamage; // void(Transform)
함수를 대신 호출할 수 있는 타입
delegate void Second();
void() 타입의 함수만 보관할 수 있음
이름이 없는 메소드
생긴건 함수같지만 타입이다
델리게이트와 동일한 매개변수를 받도록 구현해야 한다
메소드가 두번다시 사용할 일이 없다고 생각될 때 익명메소드를 사용하면 좋다
대리자를 선언 -> event 한정자로 수식해 선언 -> 이벤트 핸들러를 작성 -> 이벤트 핸들러 등록 -> 이벤트가 발생되면 호출됨
이벤트는 public 한정자도 선언되어 있어도 자신의 선언된 클래스 외부에서는 호출이 불가능함