티스토리 뷰
[.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1]
[.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2]
C# 3.0 에서 LINQ 를 위해 많은 언어적 개념이 도입되었다.
[.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2]
C# 3.0 에서 LINQ 를 위해 많은 언어적 개념이 도입되었다.
확장 메서드(Extension Methods)와 Lambda Expression 등이 바로 그것이다.
그중 Lambda Expression(이하 람다식) 은 Ruby 에서 먼저 나왔다고 하지만, C# 3.0 에서의 람다식은 LINQ 와 확장 메서드와 굉장히 사슬처럼 엮여 있는 듯한 모습이다.
람다식은 대리자(Delegate)와 제네릭 메서드의 복잡한 식을 간결하게 줄여줄 수 있다.
=>
연산자를 이용하여, 익명 메서드(Anonymous Method) 의 여러줄의 코드를 단 한줄의 코드로 줄여줄 수 가 있다.
좀더 자세한 설명히 필요하다면 다음을 참고 하도록 하자.
우리가 사용할 예제는 다음의 List<int> 컬렉션을 사용할 것이다.
List<int> arr = new List<int>();
arr.Add(1);
arr.Add(2);
arr.Add(3);
arr.Add(4); |
List<> 컬렉션은 Find 라는 메서드를 제공한다. ( 확장 메서드가 아님 )
이 메서드는 컬렉션의 특정 요소를 찾기 위해 사용되어 지는데, C# 이 제공하는 Predicate<> 델리게이트를 통해 True/False 를 반환하는 델리게이트이다.
그럼 List<> 컬렉션의 특정 요소를 찾기 위해 다음과 같이 사용된다.
static void Main(string[] args)
{
List<int> arr = new List<int>();
arr.Add(1);
arr.Add(2);
arr.Add(3);
arr.Add(4);
Predicate<int> p = new Predicate<int>(Compare);
int result = arr.Find(p);
Console.WriteLine(result);
}
static bool Compare(int i)
{
return i == 2;
} |
Predicate<int> p = new Predicate<int>(Compare);
Predicate<> 대리자는 Compare 메서드에게 일거리를 할당한 것을 볼 수 있다.
그럼, 가상 메서드를 이용하여 코드양을 줄여 보도록 하자.
int result = arr.Find(new Predicate<int>(
delegate(int i)
{
return i == 2;
}
));
Console.WriteLine(result); |
위와 같이 당연히 결과는 “2” 가 나타났다.
델리게이트를 통해 i==2 라는 요소를 찾기위해 int 인자와 bool 을 리턴하는 메서드를 만들어야 하지만, 위의 delegate 키워드의 구문은 가상 메서드를 만들게 됨으로써 코드양이 많이 줄어 들게 되었다.
하지만, 람다식을 이용하여 더 줄여보도록 하자.
Console.WriteLine(arr.Find(o => o == 2)); |
사실 이 구문이 선듯 이해가 가지 않는 필자는 무진장 머리를 굴려보았다.
잘 이해를 하기 위해 람다식을 마치 메서드가 있는 구문이라고 머리속으로 상상해보기 바란다.
=> 연산자를 기준으로 왼쪽은 넘길 인자값이 되는 것이고, 오른쪽은 내용이 되는 것이다.
그래도 잘 이해가 안된다면 마치 메서드가 존재한다는 상상 훈련을 해보면 그리 오래 걸리지 않고 쉽게 이해가 될 것 같다.
다음 2편에서는 제네릭 대리자를 통해 람다식이 가능한 확장 메서드를 만들어 보도록 하자
'.NET > C#' 카테고리의 다른 글
확장 메서드의 설계(Architect) (1) | 2007.09.12 |
---|---|
람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] (1) | 2007.09.09 |
LINQ 의 OUTER JOIN 작업 (0) | 2007.09.04 |
LINQ to SQL Classes 와 LINQ의 JOIN 작업 (2) | 2007.09.04 |
XDocument 클래스와 LINQ (0) | 2007.08.30 |
- TAG
- c#, C# 3.0, Lambda Expression, 람다표현식
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- 2,841,738
- Today
- 3
- Yesterday
- 47
링크
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
TAG
- Windows 8
- Team Foundation Server
- testing
- 엄준일
- Visual Studio
- 비주얼 스튜디오
- .NET
- github
- umc
- Team Foundation Server 2010
- 팀 파운데이션 서버
- 땡초
- LINQ
- Managed Extensibility Framework
- 비주얼 스튜디오 2010
- Silverlight
- Visual Studio 11
- .NET Framework 4.0
- test
- mono
- monodevelop
- TFS 2010
- ASP.NET
- Visual Studio 2010
- ALM
- Visual Studio 2008
- MEF
- c#
- TFS
- POWERUMC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
글 보관함
- 2020/05 (1)
- 2019/10 (3)
- 2018/11 (1)
- 2018/08 (2)
- 2017/04 (1)
- 2017/01 (2)
- 2016/11 (2)
- 2016/08 (1)
- 2016/05 (1)
- 2016/04 (2)
- 2016/02 (2)
- 2016/01 (1)
- 2015/05 (1)
- 2015/04 (2)
- 2015/03 (1)
- 2015/02 (1)
- 2015/01 (1)
- 2014/11 (1)
- 2014/09 (2)
- 2014/08 (2)
- 2014/05 (2)
- 2014/04 (3)
- 2014/03 (2)
- 2014/02 (2)
- 2014/01 (4)
- 2013/12 (2)
- 2013/11 (1)
- 2013/10 (2)
- 2013/09 (6)
- 2013/08 (3)