C#에서 IList 정렬하기 – 우아한 솔루션

데이터 정렬은 프로그래밍의 기본 작업 중 하나이지만, 때때로 간단해 보이는 작업에 도전이 되는 장애물에 직면합니다. 최근에 WCF 웹 서비스에서 반환된 IList를 정렬해야 하는 문제에 직면했습니다. IList 인터페이스는 내장된 정렬 메서드를 제공하지 않아 약간의 창의적인 우회 방법이 필요했습니다. 이 블로그 포스트에서는 문제와 LINQ를 사용한 가장 간단한 솔루션을 공유하겠습니다.

문제

IList를 정렬하려 할 때 도전이 발생했습니다. 배열이나 List와 달리 IList 인터페이스에는 Sort() 메서드가 없습니다. 그렇다면 어떻게 해야 할까요?

탐색한 잠재적 솔루션

몇 가지 옵션이 떠올랐지만, 모두 충분히 우아하지는 않았습니다:

  • ArrayList.Adapter(list).Sort(new MyComparer()) 사용: 이 솔루션은 작동하지만 약간 “안정적이지 않은” 느낌이 듭니다.
  • 확장 메서드 만들기: 가능한 선택이지만, 코드 복잡성을 증가시킬 수 있습니다.
  • IList에서 상속하기: 이 방법은 불필요한 복잡성을 더합니다.
  • List로 형변환하기: 직관적이긴 하지만 비효율적인 느낌이 듭니다.

이 옵션들 중에서 더 나은 방법이 있을 것이라는 것을 알았습니다. 다행히도 있습니다!

우아한 솔루션: LINQ 사용하기

C#에서 IList를 정렬하는 가장 좋은 방법은 LINQ(언어 통합 쿼리)를 활용하는 것입니다. 이 강력한 기능은 C# 문법으로 직접 쿼리를 수행할 수 있게 하여 효율적이고 읽기 쉬운 정렬을 가능하게 합니다.

방법은 다음과 같습니다

IList<Car>가 있다고 가정해보겠습니다. 여기서 Car 클래스는 Engine 속성을 가지고 있습니다. 차 리스트를 다음과 같은 간단한 LINQ 쿼리로 정렬할 수 있습니다:

from c in list
orderby c.Engine
select c;

이 쿼리는 자동차를 선택하고 Engine 속성에 따라 정렬합니다. 우아하고 이해하기 쉽고, LINQ의 표현력 있는 문법을 활용합니다.

LINQ를 사용해야 하는 이유?

  • 가독성: LINQ 쿼리는 구조화되어 있어 코드 의도를 명확히 합니다.
  • 간결함: 정렬하는 보일러플레이트 코드를 제거하여 보다 정돈된 결과를 얻을 수 있습니다.
  • 기능성: LINQ는 다양한 컬렉션 유형을 원활하게 처리하여 유연성을 제공합니다.

결론

요약하자면, C#에서 IList를 정렬하는 데 어려움을 겪고 있다면 LINQ를 해결책으로 고려하세요. 명확성과 기능성을 높이면서 추가적인 복잡함을 줄여줍니다. 몇 줄의 코드만으로도 효율적으로 정렬 목표를 달성할 수 있습니다.

행복한 코딩 되세요!