개발공부/C#

[Effective C#] 아이템 30: 루프보다 쿼리 구문이 낫다.

개발자 찐빵이 2021. 12. 6. 22:10
728x90

쿼리 구문의 장점

  • 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다.
  • 질의의 내용을 구성할 수 있다.
  • 개별 항목에 대해 수행하려는 작업의 수행 시기를 연기할 수 있다.
  • 사용자의 의도를 더 명확하게 드러낼 수 있다.
  • 다양하게 조합할 수 있다.

루프, 쿼리, 확장 메서드 비교

루프

var foo = new int[100];

for (var num = 0; num < foo.Length; num++)
{
    foo[num] = num * num;
}

foreach (int i in foo)
{
    Console.WriteLine(i.ToString());
}

쿼리

var foo = (from n in Enumerable.Range(0, 100)
            select n * n).ToArray();
  • 개별 항목에 대해 수행해야 하는 작업을 작은 코드 블록으로 생성한다.
  • 쿼리 구문의 지연 수행 모델 덕분에 개별 항목에 대해 수행해야 하는 여러 작업을 하나로 조합할 수 있다.

이러한 기능을 이용하면 여러 작업을 조합해서 한 번에 수행할 수 있다.

확장 메서드

foo.ForAll((n) => Console.WriteLine(n.ToString()));

public static class Extensions
{
    public static void ForAll<T>(this IEnumerable<T> sequence, Action<T> action)
    {
        foreach (T item in sequence)
        {
            action(item);
        }
    }
}

쿼리와 확장 메서드 중 어떤 것이 더 가독성이 좋은가?
스타일의 문제다.
위 경우 쿼리가 명확해 보이지만, 경우에 따라 달라질 수 있다.

반응형