다른 말로, 메소드를 가리키는 포인터(Pointer) 또는 메소드에 대한 참조라고 보면 된다.
델리게이트의 기본 개념
일반적으로 변수는 숫자, 문자열, 객체 등을 저장하는데 델리게이트는 "어떤 작업을 수행하는 코드 블록(메소드)"의 위치를 저장함
메소드를 다른 메소드의 매개변수로 전달하거나, 나중에 실행하기 위해 저장해 둘 수 있게 된다.
비유하자면 델리게이트는 TV 리모컨의 버튼과 같다. 버튼(델리게이트)을 누르면 실제로 채널을 바꾸는 동작(메소드)이 실행된다. 리모컨 버튼이 채널 변경 동작을 "가리키고" 있다.
델리게이트 사용 예시
델리게이트를 사용하면 코드를 더 유연하게 만들 수 있다.
public delegate void ProcessCompletedHandler(bool success); // 1. 델리게이트 선언
public class TaskProcessor
{
// 2. 델리게이트 타입의 변수(이벤트) 생성
public event ProcessCompletedHandler OnProcessCompleted;
public void StartTask()
{
// 작업을 수행...
bool result = true; // 성공했다고 가정
// 3. 작업 완료 후, 델리게이트가 가리키는 메소드 호출
// 이 시점에서 실제로 어떤 메소드가 실행될지는 모름.
OnProcessCompleted?.Invoke(result);
}
}델리게이트의 핵심 용도
1. 이벤트 핸들링(Event Handling): Unity의 UI 버튼 클릭이나 충돌 감지와 같은 이벤트는 델리게이트를 사용하여 구현 됨 (가장 흔한 용도)
2. 콜백 함수(Callback Functions): 비동기 작업(파일 다운로드 등)이 완료 되었을 때 실행할 함수를 지정할 때 사용
3. 플러그인 아키텍처: 실행 시점에 어떤 함수를 사용할 지 결정해야 할 때 사용
Action과 Func (축약형 델리게이트)
C#에서는 대부분의 경우 delegate 키워드를 직접 선언하는 대신, 내장된 제네릭 델리게이트인 Action과 Func를 사용한다.
Action: 반환 값이 void (없음)인 메소드를 지칭함
Action<int> action = MyMethod;
action(10); // MyMethod(10) 호출Func: 반환 값이 있는 메소드를 가리킴 (마지막 제네릭 타입이 반환 타입)
Func<int, string> func = MyMethodWithReturn;
string result = func(10); // MyMethodWithReturn(10) 호출구글 AI의 도움을 받아 작성하였습니다.
댓글 없음:
댓글 쓰기