반응형
아래 글은 C# 대리자 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.
📃 참고자료
- C# 교과서(길벗 출판사) - 40단원 대리자 546 ~ 563페이지
- 유튜브채널 VisualAcademy [C# 교과서 마스터하기 40. 대리자(Delegate)]
https://www.youtube.com/watch?v=GXuKiifDpjE
✳대리자(Delegate)란?
- 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조(포인터)를 나타내는 형식
-> 메서드 대신 호출 - 메서드의 매개 변수에 메서드 자체(대리자)를 전달 가능
-> 내장된 닷넷 API에 많이 사용 - 영어 단어 delegate는 '위임하다' 또는 '대신하다'의 의미가 있습니다
- 함수 자체를 데이터 하나로 보고 의미 그대로 다른 메서드를 대신 실행하는 기능
예제코드
using System;
//[?] 대리자(Delegate): 대신, 위임, 함수 포인터, 메서드 대신 호출, 대리 운전, 메서드의 매개변수로 전달
using System;
class DelegateSample
{
static void GoForward() => Console.WriteLine("직진");
static void GoLeft() => Console.WriteLine("좌회전");
static void GoFast() => Console.WriteLine("과속");
//static void GoRight() => Console.WriteLine("우회전");
delegate void CarDriver(); // 대리자 형식 생성
static void Main()
{
//GoForward(); //[1] 내가 직접 운동
//CarDriver goHome = new CarDriver(GoForward); //[2] 대리 운전
CarDriver goHome = GoForward;
goHome += GoLeft;
goHome += GoFast;
goHome -= GoFast;
goHome += delegate () { Console.WriteLine("우회전"); }; //[3] 무명 메서드/익명 함수
// goHome += delegate { Console.WriteLine("후진"); };
goHome += () => Console.WriteLine("후진"); //[4] 람다 식
goHome(); // goHome.Invoke();
// 내장된 대리자 형식을 통해서 직접 대리자 개체 생성: Func<T>, Action<T>, Predicate<T>, ...
Action driver = GoForward;
driver += GoLeft;
driver += delegate () { Console.WriteLine("우회전"); };
driver += () => Console.WriteLine("후진");
driver(); // 트리거(방아쇠)
Action go = () => Console.WriteLine("운전");
go();
RunLambda(() => Console.WriteLine("매개 변수로 람다 식(함수 이름, 무명 메서드) 전달"));
}
static void RunLambda(Action action) => action();
}
반응형
'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글
C# 필드(Field) (0) | 2021.05.21 |
---|---|
C# 이벤트(Event) (0) | 2021.05.21 |
C# 속성(Property) (0) | 2021.05.20 |
C# 예외처리하기(Exception) (0) | 2021.05.19 |
C# 인터페이스(Interface) (0) | 2021.05.18 |