본문 바로가기
카테고리 없음

LINQ 란 무엇인가?

by Oz Driver 2025. 5. 2.

 

한마디로 요약하면, C#에서 컬렉션을 정렬하고 필터링하는 가장 간결한 방법입니다. 

 

C# 에서는 리스트나 배열 같은 컬렉션을 다루는 일이 잦습니다.
특정 조건에 맞는 항목을 찾거나, 정해진 기준으로 정렬하는 작업이 자주 필요합니다.
이러한 작업을 훨씬 직관적으로 처리할 수 있도록 도와주는 기능이 LINQ 입니다.

LINQ 는 Language Integrated Query의 약자로, "언어에 통합된 질의" 라는 뜻입니다.
여기서 Query(쿼리) 라는 단어는 원래 "질문" 또는 "문의"라는 뜻을 가지고 있으며, 프로그래밍에서는 주로 데이터를 대상으로 하는 조건 요청을 의미합니다.

SQL 은 데이터베이스에게 “이런 조건의 데이터를 줘”라고 요청할 수 있는 질의 언어입니다.
반면 LINQ는 리스트나 배열 같은 컬렉션에게 “이런 조건의 데이터를 줘”라고 요청할 수 있게 해주는 문법입니다.
즉, LINQ 는 C# 코드 안에서 컬렉션을 대상으로 질문을 던지고, 그 결과를 간결하게 받아오는 구조를 제공합니다.

 

LINQ 를 이용한 정렬 예제

다음은 정수형 리스트를 오름차순과 내림차순으로 정렬하는 LINQ 코드입니다.

List<int> scores = new List<int> { 70, 50, 90, 30 }; 

// 오름차순 
var asc = scores.OrderBy(x => x).ToList(); 

// 내림차순
var desc = scores.OrderByDescending(x => x).ToList();
 
x => x 는 리스트 요소 자체를 기준으로 정렬하라는 뜻입니다.

숫자, 문자열, 날짜 등 비교 가능한 기본 타입일 경우 이렇게 간단하게 작성할 수 있습니다.

ToList() 는 정렬 결과를 새로운 리스트로 만들어 반환해 줍니다.
LINQ의 특징 중 하나는 원본 리스트는 그대로 유지된다는 점입니다.
기존 데이터를 변경하지 않고 새로운 리스트를 반환하기 때문에, 데이터 보존이 필요한 경우에도 안전하게 사용할 수 있습니다.

 

객체의 속성을 기준으로 정렬하기

아래는 Player라는 클래스를 예시로 든 정렬 방식입니다.

class Player 
{ 
    public string Name; 
    public int Level; 
}
 

이제 이 리스트를 이름 기준, 또는 레벨 기준으로 정렬할 수 있습니다.

var players = new List<Player> 
{ 
    new Player { Name = "Alice", Level = 12 }, 
    new Player { Name = "Charlie", Level = 15 }, 
    new Player { Name = "Bob", Level = 20 } 
}; 

// 이름 기준
var sortedByName = players.OrderBy(x => x.Name).ToList();  

// 레벨 기준
var sortedByLevel = players.OrderByDescending(x => x.Level).ToList();

 

이처럼 x => x.Name, x => x.Level과 같이 객체의 특정 속성을 기준으로 정렬을 수행할 수 있습니다.
기준만 바꿔주면 어떤 속성으로든 쉽게 정렬할 수 있다는 점이 LINQ의 큰 장점입니다.

 

마무리

LINQ는 컬렉션에 대해 정렬, 필터링, 추출, 집계 등의 작업을 매우 간결하게 처리할 수 있도록 설계된 문법입니다.
OrderBy, OrderByDescending 같은 정렬 메서드를 통해 코드를 훨씬 읽기 쉽게 만들 수 있으며, 기존 데이터를 보존한 채 결과만 따로 받아볼 수 있다는 점에서도 활용도가 높습니다.

LINQ를 활용하면 반복문 없이도 원하는 데이터를 뽑아내거나 정렬할 수 있기 때문에, 처음 접하더라도 정렬부터 천천히 익혀두면 이후 활용 폭이 크게 넓어집니다.