C# 교제 수업 13. 대리자와 이벤트

김동현·2022년 8월 11일
0

대리자

  • 함수를 보관할 수 있는 타입

  • 상용자 정의 대리자를 만들수도 있지만 System.Action 혹은 System.Func 혹은 UnityAction을 사용한다

  • Invoke() 메소드로 보관된 모든 함수를 호출할 수 있다.

    이벤트

  • 옵저버 패턴을 쉽게 사용하기 위한 타입

  • 선언된 대리자 타입의 함수를 보관할 수 있다.

  • 대리자와 다르게 외부에서 Invoke()를 할 수 없다.

  • 함수가 중복되어 추가 된다면 디버깅이 매우 어렵기 때문에 꼭 추가 전에는 삭제를 해준다.

  • 이벤트 객체에 아무런 함수도 없는 경우에는 null이기 때문에 Invoke()를 호출할 때는 꼭 Null 체크를 해준다.

    	> Ex. OnTakenDamage?.Invoke();
  • 활용 방법은 'Event'의 의미대로 특정 사건(혹은 시점)을 나타내며, 그 시점에 일어나야 하는 일들(코드상에서는 메소드로 표현)을 일어나게 할 수 있다.

  • 주의 사항

    • (1) 특정 시점이 됐는데 Invoke() 호출을 빼먹은 경우
    • (2) Invoke() 될 때 실행되어야 할 메소드를 추가하지 않은 경우

    public event Action OnTakenDamage; // void(Transform)

객체지향 설계

  • 객체지향 설계의 핵심은 메시지다.
  • 메시지 전달을 코드로 표현하려면 메소드를 호출하면 된다.

함수를 대신 호출할 수 있는 타입
delegate void Second();
void() 타입의 함수만 보관할 수 있음

익명 메소드

이름이 없는 메소드
생긴건 함수같지만 타입이다

델리게이트와 동일한 매개변수를 받도록 구현해야 한다
메소드가 두번다시 사용할 일이 없다고 생각될 때 익명메소드를 사용하면 좋다

이벤트 : 객체에 일어난 사건 알리기

대리자를 선언 -> event 한정자로 수식해 선언 -> 이벤트 핸들러를 작성 -> 이벤트 핸들러 등록 -> 이벤트가 발생되면 호출됨

대리자와 이벤트

이벤트는 public 한정자도 선언되어 있어도 자신의 선언된 클래스 외부에서는 호출이 불가능함

profile
해보자요

0개의 댓글