방프리
21.09.01 Chapter4. LINQ 활용 (Item 38) 본문
Item 38 : 메서드보다 람다 표현식이 낫다.
쿼리 표현식 내의 람다 표현식은 LINQ to Object 방식으로 델리게이트로 변환되어 수행된다.
이외에 LINQ to SQL 방식으로 람다 표현식을 활용하여 표현식 트리를 만들고, 향후 이를 파싱하여 다른 구문을
생성한 후 다른 환경에서 수행하는 방식으로도 동작한다.
LINQ to Object는 일반적으로 컬렉션 내의 저장된 요소를 쿼리할 때 사용된다.
확장 메서드로 IEnumerable<T> 입력 시퀸스를 취한다.
반면에 LINQ to SQL은 표현식 트리를 활용한다. 적절한 T-SQL 쿼리를 생성한 후, 이를 데이터베이스에 전달하는
방식이다.
저자는 재사용 가능한 라이브러리를 만드는 경우 LINQ 구문 처리를 위의 경우를 고려해서 만들어야 한다고 한다.
즉, 프로그래머들 사이에서 금기시 되는 반복 코드를 작성할 필요가 경우에 따라 있다는 뜻이다.
private static IQueryable<Employee> LowPaidSalariedFilter
(this IQueryable<Employee> sequence) =>
from s in sequence
where s.Classification == EmployeeType.Salary &&
s.MonthlySalary < 4000
select s;
var allEmployees = FindAllEmployees();
var salaried = allEmployees.LowPaidSalariedFilter();
var earlyFolks = salaried.Where(e => e.YearsOfService >= 20);
var newest = salaried.Where(e => e.YearsOfService < 20);
람다 표현식을 포함하는 간단한 메서드들을 작성하여 쿼리의 일부분을 대체할 수 있다. 이러한 메서드들은 반드시
입력 시퀸스를 취하도록 작성되어야 하며, yield return 키워드를 이용하여 시퀸스를 반환해야 한다.
IQueryable을 사용하는 메서드를 이용하면 여러 단계에 걸쳐 쿼리를 수행하더라도 결과적으로 원격지에서 쿼리가 수행
되어야 할 시점에 단일의 표현식 트리로 결합한다. LINQ to SQL 데이터 소스와 같은 IQueryProvider 객체는 로컬에서
처리해야 하는 부분을 따로 분리하지 않고 전체 쿼리를 단번에 처리한다.
만약 람다 표현식을 재사용하고 싶다면 가장 좋은 방법은 닫힌 제네릭 타입에 대하여 쿼리를 위한 확장 메서드를 작성
하는 것이다.
'C# > Effective C#' 카테고리의 다른 글
21.09.06 Chapter4. LINQ 활용 (Item 40) (0) | 2021.09.14 |
---|---|
21.09.04 Chapter4. LINQ 활용 (Item 39) (0) | 2021.09.04 |
21.08.31 Chapter4. LINQ 활용 (Item 37) (0) | 2021.08.31 |
21.08.28Chapter4. LINQ 활용 (Item 36) (0) | 2021.08.28 |
21.06.03Chapter4. LINQ 활용 (Item 35) (0) | 2021.06.03 |