안녕하세요 삽잡이입니다.
이번 시간에는 LINQ 내부 표현 방식에 대해서 알아보려고합니다.
LINQ는 내부적으로 어떻게 동작하고 있는 것일까요?
사실 이와 같이 코드를 구현하게 되더라도,
모두 컴파일러가 함수를 호출해주게 됩니다.
이처럼 자동으로 호출해주는 기능들 가운데서
Func와 Action이라는 대리자에 대해서 알아보고자합니다.
Func, Action 대리자는 모두 delegate입니다. 당연한 소리를...
함수를 가리키고 함수처럼 동작하는 객체로써,
함수를 호출하려고 사용하지요.
대리자를 범용적으로 사용하는 방법에는 두가지가 있습니다.
Func는 return 타입을 갖고,
인수가 없는 놈부터 시작하여서 여러개인 놈들을 미리 만들어 놓습니다.
그리고 Action은 return 타입이 void이며,
인수가 없는 놈부터 시작하여서 여러개인 놈들을 미리 만들어 놓습니다.
이벤트 핸들러를 만들 때
EventHandler<T> 형식을 썼습니다.
그리고 boo형식 Callback 대리자인 Predicate의 경우에도
Predicate<T> 형식을 썼었습니다.
이벤트 핸들러, Predicate가 아닌 경우에는
우리가 대리자를 만들어 사용하기 불편하니,
인수가 0개부터 n개 짜리이며 return 타입을 가진 녀석은
Func 대리자를 사용하고,
인수가 0개부터 n개 짜리이며 return 타입이 void인 녀석은
Action 대리자를 사용하도록 미리 만들어놨다는 것입니다.
LINQ에서는 이를 활용해서 쿼리식이 내부적으로 동작하는것이지요.
인수, return 타입을 보고
Func, Action 대리자가 동작하도록 만들었다는 사실을 기억하시길 바랍니다.
LINQ는 쉽게 사용할 수 있지만,
실질적으로는 모두 다 호출되고 delegate를 사용하게 되는 것이었습니다.
이상으로 이번 글을 끝내겠습니다.
지금까지 삽잡이였습니다!
'삽질의 현장 > - .NET' 카테고리의 다른 글
#069_닷넷(.NET)_.Net Framework 기본 - 어셈블리(assembly) (1) | 2015.11.07 |
---|---|
#068_닷넷(.NET)_.Net Framework 기본 - Software Component (0) | 2015.11.06 |
#066_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (사용자 정의형) (0) | 2015.11.06 |
#065_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (기본형) 2 (0) | 2015.11.06 |
#064_닷넷(.NET)_.Net Framework 기본 - LINQ의 역할 (기본형) 1 (0) | 2015.11.06 |