Event

박지예·2023년 11월 13일
0

공부

목록 보기
37/42

Event

Event

이벤트는 클래스 내 특정한 일 (event)가 일어났음을 외부의 이벤트 가입자(subscriber)들에게 알려주는 기능을 한다. C#에서는 event 라는 키워드를 사용하여 표시하며, 클래스 내에서 일종의 필드처럼 정의된다.

이벤트에 가입하는 외부 가입자 측에서는 이벤트가 발생했을 때 어떤 명령들을 실행할 지를 지정해 주는데, 이를 이벤트 핸들러 라고 한다. 이벤트에 가입하기 위해서는 += 연산자를 사용해서 이벤트 헨들러를 이벤트에 추가한다. 반대로 이벤트 헨들러를 삭제하기 위해서는 -= 연산자를 사용한다. 하나의 이벤트에는 여러개의 이벤트 핸들러 들을 추가할 수 있으며, 이벤트가 발생되면 추가된 이벤트핸들러들을 모두 차례로 호출한다.

add와 Remove

add 문은 += , remove 문은 -= 을 사용한다.

이는 선언한 이벤트 변수 안에 있는 내부리스트 (InvocationList) 에 value 델리게이트르 추가하거나 삭제하면 된다.

참고

C# Event vs Unity Event

UnityEvent는 C# event와 다르게 직렬(Serialize) 된 이벤트 객체라서 Editor 에서 바인딩이 잘된다.

하지만 스크립팅의 AddListener로는 Editor에서 확인이 되지 않는다.

Event Listener가 2개 이상일 경우, UnityEvent가 C# Event에 비해 메모리를 덜 Allocation(메모리 동적할당) 한다. (1개 일 경우 그 반대)

Event Dispatch(이벤트가 발생했을 때 해당 이벤트를 처리하는 메커니즘) 의 경우 UnityEvent는 맨 처음 Dispatch할 때 가비지를 발생시킨다. C# Event는 가비지가 발생하지 않는다.

UntiyEvent는 C# Event에 비해 최소 두 배 느리고, worst case의 경우 40배까지 느렸다.

Delegate와 Event

Delegate

delegate 는 하나의 형식(type)으로, 메서드에 대한 참조이다.

delegate는 인스턴스 메서드, 정적메서드 모두 참조가 가능하다.

delegate는 값이 아닌 ‘코드’(기능?함수?) 자체를 넘기고 싶을 때 사용할 수 있다.

델리게이트로 여러개의 메서드를 동시에 참조할 수 있다.

델리게이트는 하나의 형식(type)이다.

Event

프로그래밍에서 어떤 일이 생겼을 때 실행되는 객체

이벤트는 어떤 일이 일어났을때, 그 때 실행되는 코드이다.

delegate와 Event의 차이점

이벤트는 인터페이스 내부에 선언할 수 있지만, 델리게이트는 선언할 수 없다.

이벤트는 public으로 선언되어 있어도, 자신이 선언되어 있는 클래스 외부에서 호출할 수 없다. 이는 이벤트 기반 프로그래밍에서 안정성을 추구하는 것으로, 클래스 외부에서 변화를 줄 수 없게 하기 위함이다.

  • 델리게이트 = 콜백 용도
  • 이벤트 = 객체의 상태 변화, 사건의 발생을 알리는 용도
profile
언젠간 바다로 갈거야!🐋

0개의 댓글