본문 바로가기
개발/C#

Lambda Expression - 람다식

by EPdev 2020. 7. 21.
728x90

람다식은 람다 대수의 형식을 프로그래밍 언어로 구현한 것이다. 람다 대수는 위키피디아에서... 이전에 Java에서의 람다식에 대해 글을 하나 썼었는데, C#의 람다식은 개념은 같으나 그 표현이 약간 달라서 따로 정리한다. 그리고 람다식에 대한 고민? 철학? 을 약간 더 알아보겠다.

 

C#에서 람다식은 아래와 같이 사용된다.

  1. 코드로서의 람다식 : 익명 메소드의 간편 표기 용도

  2. 데이터로서의 람다식 : 람다식 자체가 데이터가 되어 코드 분석의 대상이 됨. 이 때 람다식은 별도로 컴파일할 수 있으며, 컴파일 시 메소드로도 실행 가능.

1번이 가장 빈번히 쓰이는 것이기에 주로 보겠다. 2번은 필요하면 찾아보자.


익명의 메소드라고 했다. 그럼 익명의 메소드를 한번 보고, 람다식으로는 어떻게 표현되는지 보자.

// 익명 메소드는 delegate로 표현할 수 있다.
delegate(object obj){
	Console.WriteLine("anonymous method!");
}
// 이와 같은 람다식으로 변경 가능!
(obj) => {
	Console.WriteLine("anonymous method!");
}
// 중요한 점은.. delegate 예약어를 생략하고 input 인자의 타입을 정하지도 않았다.
// 다만, 이게 람다식이란 것을 표현하려고 => 를 추가해줬다.

다른 예제를 보자.

using System;

class Project{
	delegate int Add(int a, int b);

	static void Main(string [] args){
		Add myAdd = (a, b) => a + b;
		Console.WriteLine("3 + 5 = {0}", myAdd(3, 5));
	}
}

람다식에 또 재밌는 게 있는데,

C#에서 컬렉션이 갖고 있는 함수 중에 람다식을 활용하면 좋은 함수들이 있다.

예를 들어, List에서 list.ForEach(action), list.FindAll(action) 등 action에 람다식을 넣어서 무언가 처리할 수 있다.

더 자세한 내용들은 컬렉션의 함수들을 잘 찾아보고, 알고 가면 좋은 것은 여기에 람다식을 넣어서 처리할 수 있다는 것이다.


람다식에 대해 공부하다보니 왜 람다식이 나오게 되었는가에 대한 답이 보인다.

람다식이 나오기 전에는 메소드에 넣어야할 파라미터나 반환값들을 선언하고 사용한다.

이 말의 의미는 메모리를 할당해서 사용한다는 얘기고, 리턴한다는 얘기도 스택에서 값을 추출한다는 등의 작업이 필요하다.

하지만 람다식은 이런 과정들을 생략해준다.

사용하고 버릴 간단한 데이터들은 선언조차 하지 않고 참고만 하도록 한다.

이런 행위의 장점은 데이터나 처리 등에 관해서 부담이 적다는 것이다.

 

또한 처음에 말한 익명의 람다식이란 것에서 이유를 하나 더 찾을 수 있다.

어떠한 메소드가 이름을 가진다는 것은 보통 new 를 통해 객체를 선언하고 메소드를 호출한다는 것인데,

이런 코드가 모이면 궁극적으로 파일 용량이 커지고 결국 성능 저하의 요인이 된다.

그래서 이름 없이(익명의) 메소드를 만드는 것이고, 이것이 람다식이다.

728x90

'개발 > C#' 카테고리의 다른 글

Helper Class - 헬퍼 클래스  (0) 2020.11.13
C# 과제  (0) 2020.07.21
as, is 연산자  (0) 2020.07.21
List - 리스트  (0) 2020.07.14
값형식과 참조형식  (0) 2020.07.13

댓글