델리게이트, 이벤트

2021. 6. 15. 21:55
728x90

 [ 델리게이트 ] 

델리게이트(Delegate) : 대리자로써 권한 등을 위임함.

  • 역할 : class안의 메서드를 참조 
    → 1개 이상의 메서드를 대신하여 호출함. 이 때, 메서드들은 매개변수와 반환형이 전부 동일한 형식이어야 함.
    → 외부에서 호출 가능하지만, private/protected 메서드는 호출할 수 없음
    → delegate는 메서드만 호출할 수 있음

 

  • 델리게이트 선언 형식 : 
[접근한정자] delegate 데이터형 델리게이트type명 ( 메서드의 매개변수 );  

 

앞으로는 "델리게이트type명"을 줄여서 "delType명"이라 부르도록 하겠다.

  • 델리게이트 사용 방법 2가지 :
//방식1
delType명 del명 = new delType명(호출할 메서드명);

//방식2
delType명 del명 = 호출할 메서드명;

 

  • 멀티캐스팅 : data를 여러 사용자에게 동시에 보내기

 

 [ 이벤트 ] 

이벤트 (Event) : 특정 상황이 발생했을 때, 이를 알려줌

  • 역할 : delegate기반(data처리) + 메서드 호출
    → "게시자" : event를 발생시키는 class (호출 및 데이터 전달)
    → "구독자" : event를 받거나 처리하는 class (데이터 처리)
    → 이벤트는 메서드 안에서만 사용 가능함

 

  • 이벤트 선언 형식 : 
[접근한정자] event delType명 이벤트명​

 

  • 이벤트에 메서트 추가/삭제하는 방법 2가지 : 
//방식1
obj명.이벤트핸들러 += new delType(obj명.메서드명);

//방식2
obj명.이벤트핸들러 += obj명.메서드명
​

 

조금 부연설명을 해보자면, 이벤트핸들러(EventHandler)에 객체의 메서드를 연결하고, EventHandler는 객체의 메서드 안에 호출된다.

아래의 예시를 참고해보자!

 

delegate void DelType(string message); // 델리게이트 생성 (message는 delegate안에서 확정된 상태)

class A {

	public event DelType EventHandler; //델리게이트형의 이벤트 생성. 이 이벤트명에 여러 메서드들이 연결됨.
	public void Func(string Message){ //멤버 메서드 생성
		EventHandler(Message); //이벤트 호출
	}
    
}

 

Func() 메서드의 매개변수 Message가 맨 첫 번째 줄의 델리게이트 괄호 안에 들어있는 것을 확인할 수 있고, 델리게이트가 메서드를 호출하는 것 또한 알 수 있었다.

정리해보자면, 델리게이트 및 이벤트 선언 순서는 아래와 같다:

  1. 객체 생성
  2. delegate 생성
  3. class 안에 delegate type의 EventHandler 생성
  4. class 안에 메서드 생성 및 EventHandler 호출

 

 [ delegate vs. event ] 

  • 공통점 :
    • 객체의 메서드를 호출함
    • 델리게이트와 이벤트는 둘 다 +=, -= 사용해서 메서드를 추가 또는 제거함.
  • 차이점 :
    • delegate
      • delegate로 호출
      • delegate에 연결
    • event
      • event를 포함한 메서드에서 호출
      • 이벤트 핸들러에 연결
728x90

'C# > C# 문법' 카테고리의 다른 글

자료형 변환  (0) 2021.06.15
배열 (Array)  (0) 2021.06.15
인터페이스 (Interface)  (0) 2021.06.14
클래스 (Class)  (0) 2021.06.14
매개변수 (Parameter)  (1) 2021.06.14

BELATED ARTICLES

more