[C#] 이벤트와 델리게이트




어떠한 일이 생겼을 때 이를 알려주는 객체가

필요한 경우가 있다. 예를 들어 사용자가 버튼을

클릭했을 때 이를 알려주는 객체가 그 것이다.

이런 객체를 만들 때 사용하는 것이 바로 이벤트이다.

이벤트의 동작 원리는 델리게이트와 거의 비슷하다.


이벤트는 델리게이트를 event 한정자로 수식해서 만든다.




자 그럼 이벤트는 어떻게 만드는지 차근차근 보도록 하자.

1. 델리게이트 선언. 클래스 밖에 선언해도 되고 안에 해도 된다.

2. 선언한 델리게이트의 인스턴스를 event 한정자로 수식해서 선언

(여기서는 클래스 내부에 있어야 한다.)

3. 이벤트 핸들러를 작성한다. 선언한 델리게이트와 일치하는 메소드여야 한다.

4. 클래스의 인스턴스를 생성하고 이 객체의

이벤트에 3에 작성한 이벤트 핸들러를 등록한다.

5. 이벤트가 발생하면 이벤트 핸들러가 호출된다.






앞서 보았듯이, 이벤트는 델리게이트에 event 키워드로

수식해서 선언한 것에 불과하다. 과연 무엇이 다를까?


이벤트와 델리게이트의 가장 큰 차이점은 바로

외부에서 접근을 할 수 있느냐 없느냐




이벤트는 public 한정자로 선언되어 있어도

자신이 선언되어 있는 클래스 외부에서는

호출이 불가능하다. 반면 델리게이트는

public이나 internal로 수식되어 있으면

클래스 외부에서라도 얼마든지 호출 가능하다.





이벤트의 이러한 특성은 견고한 이벤트 기반

프로그래밍을 가능하게 한다.

때문에 이벤트는 객체의 상태 변화나

사건의 발생을 알리는 용도로 사용이 되고

델리게이트는 콜백용도로 사용이 된다.



'C#, 유니티' 카테고리의 다른 글

[C#] C/C++/C# 메모리 할당과 가비지 컬렉터  (0) 2017.04.03
[C#] string 그리고 가비지 컬렉션  (0) 2017.03.29
[C#] 익명 메소드  (0) 2017.03.05
[C#] 일반화 델리게이트  (0) 2017.03.05
[C#] 델리게이트 (delegate)  (0) 2017.03.05

+ Recent posts