[C#] event 키워드

Learning 

When: 1학년 7월 9일

 

How:

델리게이트를 배우다 보니 event가 자주 나와서 조금 공부해 보니 event를 많이 사용한다는 것을 알아서 공부를 하게 되었습니다.

 

Understanding:

event는 대리자에 추가하는 키워드이기 때문에 대리자와 많이 다르진 않지만, 대리자는 함수를 저장하는 용도로 쓰이고 event는 특정 시점에 연결된 함수를 한 번에 호출할 때 사용됩니다. 물론 이것은 일반 delegate에서도 가능하지만 event는 좀 더 이것을 안전하고 가독성 있게 사용할 수 있기 때문에 event를 자주 씁니다. 이벤트와 대리자의 생성까지는 표면적으론 키워드의 유무 차이 밖에는 없지만 용도가 많이 달라 중간중간에 차이점들이 꽤 있기 때문에 차이점 위주로 설명을 해보겠습니다. 참고로 event에 메서드를 연결시키는 것을 '구독한다'라고 부릅니다.

이름 delegate event
역할 일반 대리자는 변수에 함수를 한개 또는 여러개 담아서 그것을 전달하거나  event는 변수를 생성하면 외부에서 그 변수에 메서드를 구독시키고, 특정한 시점이 되면 그 변수를 호출시켜 그때 실행할 메서드들을 전부 호출시키는 일을 합니다.
외부에서 할 수 있는 일 일반 대리자는 외부에서 호출할 수도 있고 = 연산자로 대입도 할 수 있습니다. 구독된 메서드들을 외부에서 없애는 등 안정성의 문제를 없애기 위해 외부에선 +=, -= 연산자로 구독하거나 구독을 해제시키는 것만 가능합니다. 그리고 외부에선 호출도 시킬 수 없으며 변수를 가지고 있는 클래스에서만 실행할 수 있습니다.

예를 들어 총을 쏘는 프로그램을 만든다고 하면, 이벤트 변수를 만들면 다른 클래스에서 소리 출력하는 메서드, 화면 흔들리는 메서드, 총알을 발사하는 메서드 등을 구독시킵니다. 그리고 총을 쏠 때 그 변수.Invoke(); 를 하여 호출하면 다른 메서드들도 신호를 받은 것처럼 전부 실행이 됩니다.

 

 

Result: 이렇게 event는 일반적인 대리자와 다르게 여러 메서드들을 받는 변수를 만들고, 다른 클래스에서 그 메서드에 메서드를 구독시킨 후 특정 시점에 신호를 주어 전부 한꺼번에 실행시키는 역할을 합니다.

'C#' 카테고리의 다른 글

[C#] Action, Func  (0) 2025.07.14
[C#] List  (1) 2025.07.13
[C#] 대리자 (Delegate)  (0) 2025.07.08
[C#] bool 타입이 아닌 값을 반환 형식이 bool인 메서드에서 반환하기  (0) 2025.07.02
[C#] 문자열의 한 문자를 가져오기  (0) 2025.06.28