글을 열며
드디어 이벤트 사용법을 알아냈습니다! 저는 LUA언어로 미니게임을 만들며 이벤트를 아주 잘 사용했었습니다. 그때의 좋은 기억 덕분에 C# 개발을 하면서도 "이거 이벤트로 만들면 진짜 딱인데..." 싶은 것들이 나올 때마다 서적을 펼쳐 이벤트 부분을 무작정 읽었습니다. 하지만 앞부분을 읽지 않으면 이벤트를 이해할 수 없었고, 그 앞부분 또한 앞부분의 앞부분을 읽지 않으면 이해하기 난해했습니다. 결국 드디어 서적의 앞부분을 다 읽고 이벤트까지 오게 되었는데, 이걸 설명하려면 델리게이트 정도는 정리하고 넘어가야 할 것 같습니다. 서적에서 왜 바로 이벤트부터 말해주지 않고 델리게이트를 먼저 설명하고 넘어가는지 글 작성자 입장이 되어 보고 나니 이해가 됩니다.
델리게이트란 ?
델리게이트는 함수를 저장하는 변수입니다.
int 변수에 숫자를 저장하듯, int 델리게이트에 int를 리턴하는 함수를 저장하고 사용할 수 있습니다.
int 변수 | int 타입 delegate | |
선언 | int a; | delegate int DelegateA; |
초기화 | a = 10; | // 델리게이트에 넣을 함수 int FuncA() {return 10;} // 델리게이트 초기화 DelegateA = FuncA; |
사용 | Console.Write(a); | Console.Wirte(DelegateA()); |
델리게이트 사용 예제
public delegate void Func();
public static void PrintA() { Console.WriteLine("a"); }
public static void PrintB() { Console.WriteLine("b"); }
public static void Main(string[] args)
{
Func func;
func = PrintA;
func(); // a 출력
func = PrintB;
func(); // b 출력
}
a
b
위의 예제를 보면, func라는 델리게이트 변수에 함수를 저장하고 사용하고 있습니다.
델리게이트의 마법은 이것 뿐만이 아닙니다.
델리게이트 사용 예제2
public delegate void Func();
public static void PrintA() { Console.WriteLine("a"); }
public static void PrintB() { Console.WriteLine("b"); }
public static void Main(string[] args)
{
Func func = PrintA;
func += PrintB;
func(); // a b 출력
}
a
b
이렇게 델리게이트에 여러 함수를 할당해 놓고, 한번에 출력할 수도 있습니다.
의문점 ... (아시는분 구합니다)
(근데 이럴거면 왜 Func를 만들어 주는지 모르겠습니다.)
(이럴거면 Func로 델리게이트 타입을 선언할 필요 없이 바로 public delegate void func로 사용하면 더 편하지 않았을까요?)
(왜 Func를 써서 굳이 한번 더 거쳐서 사용하게 만들었을까요 ?)
'Server > C#' 카테고리의 다른 글
[C#] ??= (0) | 2023.06.20 |
---|---|
[C#] FirstOrDefault (0) | 2023.06.20 |
[C# / JetbrainRider / Mac] NLog로 로그 남기는 법 (0) | 2023.06.02 |
static 맴버를 초기화하는 법 (정적 생성자) (0) | 2023.05.22 |
C# 서버 개발자 준비 (0) | 2023.05.15 |