프로젝트를 하다보면 어느 특정한 사건에서 바로 메서드를 호출하고 싶은
상황이 있다. 이를 가능하게 하는 기능은 여러가지 있지만 그 중 델리게이트
에 대해서 설명하고자 한다.
델리게이트란?
Delegate는 대리자 라고 불리며 메서드를 갖고와서 실행하는 기능이기 때문에 메서드에 대한
참조를 갖고 있다. 그렇기 때문에 delegate 인스턴스를 통해 참조하고 있는 메서드를 호출할 수
있다. 이러한 특징으로 특정 이벤트가 발생했을 때 원하는 함수를 호출할 수 있게 만들어 준다.
주의할점은 메서드를 구현할 때 반환 형식이 델리게이트의 반환 형식과 같아야 한다.
사용법
델리게이트는 namespace나 클래스 내부에서도 선언 가능하며 delegate 타입 함수명
형식으로 선언 가능하다. 위 코드에서는 델리게이트를 int형 두개로 선언해줬기 때문에
델리게이트가 참조할 함수도 int형 두개로 선언해줘야 한다.
델리게이트를 사용하기 위해 클래스 내에서 제작한 함수들을 델리게이트의 반환 형식과
같도록 구현했다. 메인에서는 참조할 함수들을 선언해주고 있는데 new를 통한 방법과
간단하게 메서드를 바로 붙이는 형식 두 가지를 사용했다.
결과는 3과 2를 값으로 넣어서 호출한 Add함수의 결과 값 5, 3과 2를 값으로 넣어서
호출한 Sub함수의 결과 값1이 나온다.
그리고 델리게이트는 델리게이트 체인을 지원하기 때문에 여러 개의 함수를
등록할 수 있다. Add와 Sub함수를 +=으로 연속하여 등록한 후
실행해주면
결과 값은 이러한 형식으로 나온다.
만약 호출을 표시하는 Console.WriteLine 부분이 없었다면 1만 반환하기 때문에
마지막 함수만 호출하는 것이라고 생각할 수 있지만 제대로 등록한 함수들을
하나 씩 실행하여 마지막 함수에 대한 결과 값을 반환하며 종료하는 것을 알 수 있다.
'TIL > C#' 카테고리의 다른 글
[C#] 정렬 알고리즘 (선택 정렬, 버블 정렬) (0) | 2023.11.09 |
---|---|
[C#] Callback은 무엇인가? (0) | 2023.11.08 |
[C#] 제네릭 (0) | 2023.11.02 |
[C#] 배열, List, ArrayList, Dictionary의 차이점 (1) | 2023.11.02 |
[C#] 박싱과 언박싱 (0) | 2023.11.01 |