JS의 익명함수 그리고 C#의 대리자를 통한 익명함수(람다) 참조

냐옹·2024년 2월 29일
0

asp.net core

목록 보기
4/6

자바스크립트의 익명함수를 최대한 비슷하게 쓰려면 어떻게 해야할까. 예를 들어서 JS에 이런코드가 있다고 쳐보자.
const fun1 = (a) => { console.log(a) }
이걸 갖다가 C#에서 표현하려면 대리자를 사용해야한다.
Action Fun1= (a) => { Console.WriteLine(a); }

람다를 잘 알아야 한다. 마이크로소프트 문서를 보니까 LINQ를 적극 사용했다가 요즘 문서를 보면 전부 람다로 적혀있다. 근데 람다식은 그렇더라도 람다문을 알아가다보면 대리자라는 것이 등장한다. 그래서 문서를 잘 읽기 위해서는 대리자에 대한 이해가 필요하다.
대리자를 여러 책에서 써놓은 것을 보니까 이해하기가 좀 그랬는데, 결국 보면 대리자는 메서드에 대한 참조를 표현하는 타입이다. 대리자를 사용하면 메서드를 변수에 할당하고, 매개변수로 전달하고 다른 메서드의 반환값으로 사용할 수 있다. 그렇기 때문에 프로그램에서 콜백 함수와 이벤트 핸들러를 대리자로 구현할 수 있는 것이다.

대리자 타입은 기본적으로 2개가 있고, 이벤트 처리를 위한 것이 1개가 있다. ( Func 대리자 / Action 대리자, EventHandler )
1. Func 대리자.
A. Func 대리자는 반환값이 있는 메서드를 참조하기 위해서 사용된다.
B. Func은 0개에서 16개 까지의 매개변수를 가질 수 있고 마지막 타입 파라미터는 메서드의 반환 타입을 나타낸다.
예시코드
Func<int, int, int> add = ( x, y ) => x + y;
int result = add( 1, 2 );

  1. Action 대리자
    A. Action대리자는 반환값이 없는 메서드를 참조하기 위해서 사용한다.
    B. 마찬가지로 0~16개의 매개변수를 가질 수 있다.
    Action greet = (name) => { Console.Write(“dd”);
    C. Action에 매개변수의 타입을 전달해주어야 한다.
    D. 그리고 람다 관련 규칙은 자바스크립트와 거의 같다.
    i. 인수가 한개일때 괄호를 생략한다던지.. 그런거

  2. EventHandler 대리자
    A. EventHandler와 EventHandler는 이벤트에 대한 추가정보를 제공하는 EventArgs 파생 클래스의 인스턴스를 매개변수로 사용할 수 있다.
    B. 람다 자체와 관련은 없는듯..?
    public event EventHandler MyEvent;

protected virtual void OnMyEvent(MyEventArgs e){
MyEvent?.Invoke( this, e );
}

0개의 댓글