글로벌 객체지향 프로그래밍 14주차 - C# Delegate 이벤트
Delegate
정의
- 메소드를 대신하여 호출하는 기법
- 선언을 위해서는 delegate 키워드를 사용
사용 방법
선언방법
1
접근제한자 delegate 반환타입 대리자 이름(매개변수 목록);
예시
1
public delegate void MyTestDelegate(string value);
호출 방법
1
2
3
4
5
//메소드가 여러번 사용되는 경우
대리자이름(매개변수 값);
//메소드가 한번만 사용되는 경우
대리자이름 객체이름 = delegate 반환타입(매개변수);
사용 예시
1
2
3
4
5
6
7
8
9
public static void MyTestVoid(string value)
{
Console.WriteLine(value);
};
MyTestDelegate delegate1 = MyTestVoid; // MyTestVoid 메소드를 del1에 할당
delegate1("Method A Called");
MyTestDelegate delegate2 = delegate void (string value); //한번만 사용되는 메소드에 델리게이트 하는 경우
주의 사항
- Delegate에 할당할 메소드 만들기 - 반환타입과 메소드가 Delegate 선언과 동일해야 됨.
사용 이유
메소드의 매개변수에 메소드를 전달하거나, 메소드를 조합해야하는 경우에 유용
델리게이트를 사용하지않는 경우, 수많은 메소드나 로직을 작성해야 함
-> 코드 길이 증가
Action
개념
- 입력(매개변수)와 출력(반환형)이 없는 메소드를 가르킬 수 있는 델리게이트
사용방법
선언
1
Action 변수;
할당
1
변수 += 메소드 이름;
호출
1
변수();
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ActionTest : MonoBehaviour
{
private Action action;
// Start is called before the first frame update
void Start()
{
action += Alpha;
action += Beta;
action(); //등록된 모든 메소드가 일괄 실행
}
void Alpha() => Debug.Log("Alpha");
void Beta() => Debug.Log("Beta");
}
이벤트
개념
연쇄 동작을 이끌어내는 사건
어떤 일을 실행하지는 않지만, 이벤트가 발생하면 등록된 처리들이 연쇄적으로 실행됨
이벤트는 이벤트리스너가 어떤 처리를 실행하는지 상관 X
이벤트는 자신에게 등록된 메소드들의 내부 구현을 알지 못하는 상태로 메소드를 실행함
- 이벤트 리스너
- 이벤트가 발생될 때, 실행되는 메소드들
- 이벤트에 등록하는 것을 이벤트 리스너가 이벤트를 구독한다고 표현
Event
- 델리게이트 타입의 변수는 event 키워드를 붙여 사용 가능
- 델리게이트 변수를 event로 선언하면 클래스 외부에서는 해당 델리게이트를 실행 불가능 함.
- 오로지 내부에서만 실행됨
- 사용을 하는 경우, Event를 사용하지 않는 쪽에서 이벤트 발동하는 것을 방지할 수 있음
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.