<대리자(delegate)>
"대리자(delegate)"는 특정한 메서드에 대한 참조를 가지는 타입(type).
즉, 대리자는 메서드를 변수처럼 저장하고, 전달하며, 호출할 수 있게 해주는 객체이다.
대리자는 C#과 같은 객체 지향 프로그래밍 언어에서 중요한 기능으로,
이벤트 처리나 콜백 메서드의 구현에 자주 사용된다.
<대리자의 주요 특징>
메서드 참조: 대리자는 하나 이상의 메서드를 참조할 수 있으며, 이를 통해 메서드를 변수처럼 전달하고 호출할 수 있다.
타입 안전성: 대리자는 특정 시그니처(매개변수와 반환 타입)를 가진 메서드만 참조할 수 있다. 이를 통해 타입 안전성을 보장한다.
멀티캐스팅: 하나의 대리자 인스턴스가 여러 메서드를 참조할 수 있으며, 대리자를 호출할 때 참조된 모든 메서드가 순차적으로 실행된다.
C#에서는 두 가지 기본적인 대리자 타입을 제공한다.
System.Delegate: 모든 대리자의 기본 클래스
System.MulticastDelegate: Delegate를 상속받으며, 여러 메서드를 참조할 수 있는 대리자의 기본 클래스
<예제>
public delegate int MyDelegate(int x, int y); // 대리자 정의
public class Example
{
public static int Add(int a, int b)
{
return a + b;
}
public static int Multiply(int a, int b)
{
return a * b;
}
public static void Main()
{
MyDelegate del = new MyDelegate(Add); // 대리자 인스턴스 생성 및 메서드 참조
int result = del(10, 20); // 대리자를 통한 메서드 호출
Console.WriteLine(result); // 결과 출력
del += Multiply; // 대리자에 다른 메서드 추가 (멀티캐스팅)
result = del(10, 20); // 이제 Add와 Multiply 둘 다 호출
}
}
위 예제에서 MyDelegate는 두 개의 int 매개변수를 받고 int를 반환하는 메서드를 참조할 수 있는 대리자이다.
Add와 Multiply 두 메서드는 이 대리자의 시그니처와 동일하다.
Main 메서드에서는 MyDelegate 타입의 대리자를 생성하고, Add 메서드를 참조하여 호출한다.
이후에 Multiply 메서드를 추가하여 멀티캐스팅 기능을 사용 할 수 있다.
이때, 코드의 result = del(10, 20); 부분은 실제로 대리자 del에 등록된 모든 메서드 (Add와 Multiply)를 호출하는데,
여기서 중요한 점은 멀티캐스트 대리자가 여러 메서드를 호출할 때 각 메서드의 반환 값은 기본적으로 무시되고,
오직 마지막에 호출된 메서드의 반환 값만이 최종적으로 대리자 호출로부터 반환된다는 점이다.
'유니티 C# 함수 사용 정리' 카테고리의 다른 글
Resources 폴더에서 Atlas를 찾아 image 반환하기 (0) | 2024.03.25 |
---|---|
instantiate 생성 시 이동 벡터에 따라 프리팹의 forward 조정하기 (0) | 2024.03.22 |
충돌된 지점의 법선 벡터 메모 (0) | 2024.03.14 |
딕셔너리와 인덱서 (0) | 2024.02.08 |
Mathf.Clamp의 사용법 (0) | 2024.01.29 |