📕람다 식(Lambda Expression)
함수를 하나의 식(Expression)으로 표현한 것으로, 익명 함수(Anonymous Function)를 간결하게 표현하는 데에 쓰인다. 람다식을 사용하면 코드가 간결해지고 개발자의 의도를 명확히 드러낼 수 있다는 장점이 있다. 다만 람다식으로 만든 함수는 일회용이기 때문에 재사용이 불가능하다.
📖람다 식의 형태
람다식은 무명 메서드가 발전한 형태이다. 람다 식의 형태를 잘 보면 무명 메서드의 delegate 키워드와 매개 변수 형식을 삭제한 뒤 람다 연산자 '=>'를 더한 것을 볼 수 있다.
위의 형태로 사용해도 정상적으로 작동하지만 구문(statement)이 하나라면 중괄호와 return, 세미콜론까지도 삭제할 수 있다. 또한 매개 변수가 하나라면 소괄호도 삭제할 수 있다.
다음은 위 식에서 매개 변수와 연산자, 구문에 해당하는 부분을 나타낸 그림이다.
📌매개 변수의 개수에 따른 표현법
(1)매개 변수가 여러 개일 때
(s, youngAge) => s.Age >= youngage;
(2)매개 변수가 여러 개이고 형식이 형식이 다를 때
(Student s,int youngAge) => s.Age >= youngage;
(3)매개 변수가 없을 때
() => Console.WriteLine("Parameter less lambda expression")
📌구문의 개수에 따른 표현법
실행할 구문이 여러 개라면 중괄호를 사용해서 래핑할 수 있다.
(s, youngAge) =>
{
Console.WriteLine("Lambda expression with multiple statements in the body");
Return s.Age >= youngAge;
}
📌람다 식에서 지역 변수 선언하기
람다 식 표현부에 지역 변수를 선언하는 것도 가능하다.
s =>
{
int youngAge = 18;
Console.WriteLine("Lambda expression with multiple statements in the body");
return s.Age >= youngAge;
}
📖람다 식의 할당
📌Func<in T, out TResult>
Func<in T, out TResult> 델리게이트의 경우 다음과 같이 람다 식을 사용한다.
Func<Student, bool> isStudentTeenAger = s => s.age > 12 && s.age < 20;
Student std = new Student() { age = 21 };
bool isTeen = isStudentTeenAger(std);// returns false
위 예에서 Func은 매개 변수 'Student'와 반환 형식 'bool'로 이루어졌다. 따라서 람다 식 s => s.age > 12 && s.age < 20도 Func의 구성 요소를 포함해야 한다.
📌Action
반환 값이 없는 Action 델리게이트의 경우 다음과 같이 람다 식을 사용한다.
Action<Student> PrintStudentDetail = s => Console.WriteLine("Name: {0}, Age: {1} ", s.StudentName, s.Age);
Student std = new Student(){ StudentName = "Bill", Age=21};
PrintStudentDetail(std);//output: Name: Bill, Age: 21
🔖인용한 사이트
Anatomy of the Lambda Expression (tutorialsteacher.com)
Anatomy of the Lambda Expression
Anatomy of the Lambda Expression C# 3.0(.NET 3.5) introduced the lambda expression along with LINQ. The lambda expression is a shorter way of representing anonymous method using some special syntax. For example, following anonymous method checks if student
www.tutorialsteacher.com
프로그래밍 기타 용어
Memoization, 메모이제이션, 꼬리 재귀, make 빌드, Lambda Expression, 람다 표현식
www.ktword.co.kr
'C#' 카테고리의 다른 글
구조체(Struct)와 클래스(Class) (0) | 2022.06.17 |
---|---|
생성자 (0) | 2022.06.17 |
프로퍼티(Property, 속성) (0) | 2022.06.14 |
델리게이트(Delegate, 대리자)와 이벤트(Event) (0) | 2022.06.10 |
Class (0) | 2022.03.18 |