LINQ
- Language Integrated Query
- 람다식과 마찬가지로 C# 3.0부터 도입된 기능
- LINQ를 사용하면 객체, 데이터, XML과 같은 다양한 데이터를 표준화된 방법으로 처리할 수 있다.
- LINQ to Objects, 여러 객체를 입력데이터로 취급
LINQ to Objects의 간단한 예
LINQ를 사용하려면 먼저 using 지시자를 사용해 System.Linq 네임스페이스를 지정해야한다.
IEnumerable<string> results = names.Where(s=>s.Length <= 6);
Where 메서드는 시퀀스에서 조건을 만족하는 것만 추출하는 메서드이다.
List<T>의 FindAll 메서드처럼 인수로 람다식을 지정할 수 있고 동작도 비슷하지만
var names = list.FindAll(s=>s.Length <= 6);
FindAll은 List<T>를 통해서만 이용할 수 있다.
배열인 경우에도 FindAll 메서드를 사용할 수 있지만 다음과 같은 방식으로 작성해야한다.
Array.FindAll(arrayOfName, s=>s.Length <= 6);
List<T>나 배열 등 각각의 자료형에 따라 비슷한 기능을 하는 메서드가 각자 존재하고 사용방법이 다른 것을 확인할 수 있다.
하지만 LINQ의 Where 메서드 경우
배열, List<T>, Dictionary<TKey, Tvalue> 그 밖의 객체에도 IEnumerable<T> 인터페이스를 구현하고 있는 형이기만 하면 해당 객체를 대상으로 동일한 메서드를 이용할 수 있다는 점이 크게 다르다.
위와같이 '조건을 만족하는 요소를 찾는' 프로세스를 수행할 때 컬렉션의 종류에 따라 다른 방식으로 코드를 작성해야 한다는 것은 프로그래머에게 부담이된다.
LINQ를 사용하면 서로 다른 형의 컬렉션이어도 IEnumerable<T> 인터페이스를 구현한다면 같은 메서드를 이용할 수 있다.
Where 메서드의 반환값이 IEnumerable<T>이기 때문에 아래와 같이 메서드를 연결하여 실행할 수 있다.
//Where 메서드의 반환값이 IEumerable<T>라 LINQ Select 메서드를 바로 실행할 수 있다.
IEnumerable<string> results = names.Where(s=>s.Length <= 6).Select(s=>s.ToLower());
이처럼 메서드를 연결한는 것을 메서드 체인이라고 한다.
Select 메서드는 각 요소에 대해 람다식에서 지정한 변환 처리를 수행한다.
Select 메서드이 반환값 또한 IEnumerable<T>인데 이 요소에 형인 T는 Select 메서드에서 지정하는 람다식에 의해 결정된다.
위 메서드 체인을 통해 실행한 Select의 람다식은 s=>s.ToLower()이므로
ToLower 메서드의 반환값의 형인 string이라
반환값이 IEnumerable<string>이 된다.
실제 코드에서는 일반적으로 var 키워드를 사용하여 아래와 같이 작성한다.
var results = names.Where(s=>s.Length <= 6).Select(s=>s.ToLower());
'C# > LINQ' 카테고리의 다른 글
LINQ의 지연 실행과 즉시 실행 (0) | 2021.06.17 |
---|