[30] 루프보다 쿼리 구문이 낫다

다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.

 

 

일상적인 개발에서 반복구문을 사용하여 개발하는 것은 대부분의 경우 문제는 없다.

하지만 쿼리구문을 사용한다면 몇 가지 이점을 가져올 수 있다.

 

1. 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다.

2. 질의의 내용을 구성할 수 있을 뿐 아니라 개별 항목에 대해 수행하려는 작업의 수행 시기를 연기할 수 있다.

3. 사용자의 의도를 더 명확하게 드려낼 수 있다.

 

명령형 방식으로 구현한 예

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();

 

반복 구문에 비해 쿼리구문은 더욱 다양하게 조합이 가능하다.

 

반복 구문은 복잡도가 심해질수록 코드를 읽는것이 상대적으로 훨씬 어렵지만,

쿼리 구문은 좀 더 명확하게 이해할 수 있다.

 

반복 구문은 과정들을 독립된 과정으로 수행하지만

쿼리 구문은 지연 수행 모델 덕분에 여러 개별 과정들이 한번의 순회 동안 모두 수행된다.

 

성능 문제

 기본적으로 루프보다는 쿼리 구문보다 비용이 많이 든다고 알려져있다.

 하지만 성능을 개선하기 위해 LINQ의 .AsParallel()을 통해 병렬 확장을 사용해보는 것도 고려해보자. 

msdn : 간단한 PLINQ 쿼리 만들기 및 실행
https://docs.microsoft.com/ko-kr/dotnet/standard/parallel-programming/how-to-create-and-execute-a-simple-plinq-query

 

결론

 쿼리문을 사용하면 여러 장점들이 있으니, 많은 처리를 해야 되는 경우 우선적으로 쿼리 구문을 사용해보자. 

 

 

 

댓글

Designed by JB FACTORY