델리게이트, 이벤트
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가 맨 첫 번째 줄의 델리게이트 괄호 안에 들어있는 것을 확인할 수 있고, 델리게이트가 메서드를 호출하는 것 또한 알 수 있었다.
정리해보자면, 델리게이트 및 이벤트 선언 순서는 아래와 같다:
- 객체 생성
- delegate 생성
- class 안에 delegate type의 EventHandler 생성
- class 안에 메서드 생성 및 EventHandler 호출
[ delegate vs. event ]
- 공통점 :
- 객체의 메서드를 호출함
- 델리게이트와 이벤트는 둘 다 +=, -= 사용해서 메서드를 추가 또는 제거함.
- 차이점 :
- delegate
- delegate로 호출
- delegate에 연결
- event
- event를 포함한 메서드에서 호출
- 이벤트 핸들러에 연결
- delegate
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 |