40.3 대리자를 사용하여 메서드 여러 개를 다중 호출하기
이제 대리자 형식의 변수 하나에 메서드 여러 개를 등록한 후 한 번에 여러 개를 호출하는 메서드 다중 호출 내용을 살펴보겠습니다.
1. 새로운 C# 콘솔 프로젝트를 다음과 같이 만듭니다.
프로젝트 형식 |
템플릿 |
이름 |
위치 |
Visual C# |
콘솔 앱 프로그램 |
DelegatePractice |
C:\C# |
2. 솔루션 탐색기에서 Program.cs 파일을 DelegatePractice.cs 파일로 이름을 변경하고, 이미 만든 모든 코드를 삭제한 후 다음과 같이 프로그램을 만듭니다. 편의상 CarDriver 클래스의 멤버 메서드는 모두 정적(static) 멤버로 구성했습니다.
//DelegatePractice.cs using System; namespace DelegatePractice { public class CarDriver { public static void GoForward() => Console.WriteLine("직진"); public static void GoLeft() => Console.WriteLine("좌회전"); public static void GoRight() => Console.WriteLine("우회전"); } public class Insa { public void Bye() => Console.WriteLine("잘가"); } //대리자 생성: 의미상으로 대리운전, class 같은 레벨로 생성해도 됨 public delegate void GoHome(); public class DelegatePractice { //대리자 형식 선언: 메서드를 묶을 별칭, 클래스 내부에도 생성 가능 public delegate void Say(); private static void Hello() { Console.WriteLine("Hello"); } private static void Hi() { Console.WriteLine("Hi"); } static void Main(string[] args) { //① 메서드는 따로따로 호출 CarDriver.GoLeft(); CarDriver.GoForward(); CarDriver.GoRight(); //② 대리자를 사용한 메서드 등록 및 호출 GoHome go = new GoHome(CarDriver.GoLeft); go += new GoHome(CarDriver.GoForward); go += new GoHome(CarDriver.GoRight); go += new GoHome(CarDriver.GoLeft); //등록 go -= new GoHome(CarDriver.GoLeft); //취소 go(); //집에 갑시다... 한 번 호출 Console.WriteLine(); //③ 대리자를 사용하여 한 번에 메서드 2개 호출... Say say; //ⓐ 대리자 형식 변수 선언 say = new Say(Hi); //ⓑ Hi 메서드 지정 say += new Say(Hello); //ⓒ Hello 메서드 지정 say(); //ⓓ 대리자로 메서드 2개 호출 //④ 대리자를 사용하여 호출 Insa insa = new Insa(); Say say2 = new Say(insa.Bye); say2 += new Say(insa.Bye); say2(); } } }