학습
C# LINQ 기초
C# LINQ 기초 — 초급
LINQ 기초
1. 도입 (왜 배워야 하는가)
LINQ(Language Integrated Query)는 C#에서 컬렉션 데이터(리스트, 배열 등)에 대해 쿼리할 수 있는 강력한 도구입니다. LINQ를 사용하면 데이터 소스를 SQL과 유사한 방식으로 쉽게 다룰 수 있어, 코드의 가독성이 높아지고 작성 시간이 줄어듭니다. 실무에서는 데이터베이스와의 상호작용, 데이터 필터링, 정렬 등에 LINQ가 널리 사용됩니다.
LINQ를 모르면, 데이터 처리 과정이 복잡해지고, 반복적이고 비효율적인 코드를 작성하기 쉽습니다. 예를 들어, 데이터를 필터링할 때 매번 반복문을 사용해야 하며, 이는 코드의 가독성을 떨어뜨리고 유지보수를 어렵게 만듭니다.
2. 핵심 개념 설명
LINQ는 다음과 같은 핵심 개념으로 구성됩니다:
- 쿼리: 특정 조건을 만족하는 데이터의 집합을 요청하는 것. 예를 들어, "모든 학생의 성적이 80점 이상인 리스트를 가져와라."
- 데이터 소스: LINQ가 쿼리할 수 있는 데이터의 집합. 예를 들어, 리스트, 배열, 데이터베이스 등.
- LINQ 메서드: LINQ 쿼리를 사용하는 방법. 예를 들어,
Where,Select,OrderBy등이 있습니다.
| 용어 | 설명 |
|---|---|
| 쿼리 | 데이터의 특정 조건을 찾아내는 요청 |
| 데이터 소스 | LINQ가 쿼리할 수 있는 데이터의 집합 |
| LINQ 메서드 | 쿼리를 작성하기 위해 사용하는 함수들 |
3. 기본 코드 예제
다음은 LINQ의 기본 사용법을 보여주는 예제입니다.
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// LINQ 쿼리 사용
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
실행 결과
2
4
6
8
10
코드 한 줄씩 동작 설명
using구문: LINQ를 사용하기 위해 필요한 네임스페이스를 포함합니다.List<int> numbers: 1부터 10까지의 정수를 포함하는 리스트를 생성합니다.var evenNumbers = numbers.Where(n => n % 2 == 0);: 리스트에서 짝수만 필터링합니다.foreach: 필터링된 짝수 리스트를 반복하여 출력합니다.- LINQ 쿼리 결과를 즉시 실행하지 않음
- 조건문을 잘못 작성함
- LINQ는 C#에서 데이터 처리의 효율성을 높여줍니다.
- 기본적인 LINQ 메서드인
Where,Select,OrderBy를 활용하여 데이터를 필터링하거나 정렬할 수 있습니다. - LINQ 쿼리는 즉시 실행하지 않으면 결과가 예상과 다를 수 있습니다.
- 다음에 학습하면 좋은 주제: LINQ의 고급 기능 (grouping, joining 등), LINQ to SQL, LINQ to Entities.
4. 실전 활용 예제
1. 쇼핑몰에서 장바구니 구현
장바구니에 담긴 상품 중에서 가격이 10000원 이상인 상품을 필터링하는 경우:
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public string Name { get; set; }
public int Price { get; set; }
}
class Program
{
static void Main()
{
List<Product> cart = new List<Product>
{
new Product { Name = "가방", Price = 15000 },
new Product { Name = "신발", Price = 8000 },
new Product { Name = "모자", Price = 12000 }
};
var expensiveProducts = cart.Where(p => p.Price >= 10000).ToList();
foreach (var product in expensiveProducts)
{
Console.WriteLine($"{product.Name}: {product.Price}원");
}
}
}
2. 학생 성적 처리
학생의 성적 리스트에서 70점 이상인 학생을 찾아내는 예제:
using System;
using System.Collections.Generic;
using System.Linq;
class Student
{
public string Name { get; set; }
public int Score { get; set; }
}
class Program
{
static void Main()
{
List<Student> students = new List<Student>
{
new Student { Name = "홍길동", Score = 85 },
new Student { Name = "김철수", Score = 60 },
new Student { Name = "이영희", Score = 90 }
};
var passingStudents = students.Where(s => s.Score >= 70).Select(s => s.Name).ToList();
foreach (var student in passingStudents)
{
Console.WriteLine(student);
}
}
}
5. 흔한 실수와 주의사항
- 잘못된 코드:
var results = numbers.Where(n => n > 5);
- 올바른 코드:
var results = numbers.Where(n => n > 5).ToList();
- 주의사항: LINQ 쿼리는 실행 시점에 따라 결과가 달라질 수 있으므로, 쿼리 결과를 사용하기 전에 반드시 실행해야 합니다.
- 잘못된 코드:
var results = numbers.Where(n => n = 5);
- 올바른 코드:
var results = numbers.Where(n => n == 5);
- 주의사항: =는 대입 연산자이며, 비교를 하고 싶을 때는 ==를 사용해야 합니다.