C# - 람다식

양규빈·2023년 9월 7일
0

C# 공부

목록 보기
22/30

개요

익명으로 작성된 함수이다.
람다식은 일반적으로 LINQ(언어 통합 쿼리)이나 대리자(Delegate)를 사용하는 다양한 상황에서 사용된다.
람다식은 매우 유용하며 코드를 간결하게 작성하고 읽기 쉽게 만들어준다.

무명 메서드를 람다식으로 변경하면 좀 더 간단하게 표현 가능하다.
함수 파라미터로 함수를 넘기는 것도 가능하다.

람다식을 이용하기 위해서는 반드시 => 키워드가 필요하다.
람다식에서 return을 구현하려면 {}를 사용하면 된다.


(parameters) => expression

parameters: 람다 함수의 입력 매개변수를 정의. 매개변수를 받지 않는 경우 빈 괄호 ()로 표시한다.

expression: 람다 함수의 본문을 나타내는 표현식. 이 표현식의 결과가 람다 함수의 반환 값이 된다.

람다식을 사용하여 간단한 델리게이트를 생성하고 사용할 수 있다.

람다식과 델리게이트

델리게이트: 델리게이트는 메서드 시그니처(매개변수 타입과 반환 타입)를 나타내며, 델리게이트 인스턴스를 선언하고 초기화할 때에는 기존 메서드의 이름을 지정해야 한다. 즉, 메서드 이름을 사용하여 델리게이트를 생성하고 호출한다.

delegate int MyDelegateFunction(int x, int y);
MyDelegateFunction add = AddNumbers; // AddNumbers 메서드를 가리키는 델리게이트 생성
int result = add(2, 3); // 델리게이트 호출

람다식: 람다식은 익명 함수를 정의하는 방법으로, 메서드의 구체적인 이름을 사용하지 않고도 직접 인라인으로 함수를 정의할 수 있다.
람다식은 메서드 시그니처를 생략하고 표현식으로 함수의 동작을 정의한다. 또한 람다식은 익명 함수를 간편하게 정의할 수 있다.

Func<int, int, int> add = (x, y) => x + y; // 람다식을 사용한 델리게이트 초기화
int result = add(2, 3); // 람다식을 통한 델리게이트 호출

람다식은 델리게이트에 비해서 비교적 간결하고 가독성 높은 코드 구현을 제공하지만, 상대적으로 간단한 함수를 정의하는 데 사용되며, 델리게이트는 복잡한 메서드를 가리키거나 대리자 역할을 수행할 때 유용하다.



코드 및 세부 설명

기본 사용

각 예제는 주석으로 구분된다.

첫 번째 예제는 clickOK 델리게이트에 (object sender, string msg) 매개변수를 가지는 람다식을 추가한다.
중괄호 {}로 람다식의 본문을 감싸고, 본문 안에서 Console.WriteLine(msg)를 한다.

두 번째 예제는 clickOK 델리게이트에 (sender, msg) 매개변수를 가지는 람다식을 추가한다.
마찬가지로 중괄호 {}로 람다식의 본문을 감싸고, 본문 안에서 Console.WriteLine(msg)를 실행합니다.

세 번째 예제는 clickOK 델리게이트에 (sender, msg) 매개변수를 가지는 람다식을 추가한다.
중괄호 {} 없이 람다식의 본문이 단일 표현식인 경우, 중괄호를 생략할 수 있다.
Console.WriteLine(msg)가 본문의 단일 표현식으로 사용되어 해당 메시지를 출력한다.


기본 선언, 익명 선언, 람다식을 이용한 여러 가지 인스턴스 초기화 방법을 구현한 것이다.
각 줄은 모두 동일한 기능을 구현한다.


스탠다드 라이브러리의 Func 클래스 또한, 기본 선언과 익명 메서드, 람다식을 이용하여 인스턴스할 수 있다.

람다식을 이용할 경우, delegate가 생략되고, 코드를 간결화하는 것이 가능하다.

람다식에 return값이 있을 경우, 중괄호를 이용하여 내용을 작성하거나, 중괄호를 생략하는 것올 반환을 지정할 수 있다.
이때, 중괄호와 return 키워드를 생략하는 건, 단일 표현식일 경우에만 가능하다.


람다식을 이용한 코드구현

위 코드는 람다식이 아닌 델리게이트를 이용한 함수 구현이다.
FindAll의 파라미터로 Predicate<T>를 대리자를 이용하여 넘긴다.

라이브러리에 존재하는 Convert 메서드의 파라미터와 반환형을 람다식을 이용하여, 초기화한다.
상단의 코드는 인트형을 스트링형으로 바꿔주는 람다식을 구현한 것이다.


Sort 함수의 비교자를 각각 델리게이트와 람다식을 이용하여 구현한 코드이다.
대리자를 이용한 경우 오름차순,
람다식을 이용한 경우 내림차순으로 정렬된다.


위 코드는 사용자 정의 함수를 람다식과 대리자를 이용하여, 인스턴스를 생성하는 코드이다.

PrintConditionData함수는 Func 함수를 받는 condition을 매개변수로 받는다.
string을 받아서. bool형으로 리턴하는 함수인 Func으로, item의 출력 여부를 결정한다.

profile
훌륭한 개발자를 꿈꾸는 중입니다

0개의 댓글