C#
C# 기초부터 고급까지 Chapter 2.4. LINQ 실무 활용법 – 쿼리 문법 vs 메서드 문법 완전정복
Juan_
2025. 4. 30. 20:30
728x90
📘 Chapter 2.4: LINQ 실무 활용법 – 쿼리 문법 vs 메서드 문법 완전정복
✅ 이 챕터에서 배울 것
LINQ는 C# 개발자라면 반드시 마스터해야 할 핵심 도구!
특히, 두 가지 문법 스타일(쿼리 vs 메서드) 을 구분 못하면
실무에서 코드 읽기도, 디버깅도 헷갈리기 딱 좋다.
이번 챕터에서 아래 전부 다 뽀갠다:
- LINQ란?
- 쿼리 문법(Query Syntax)
- 메서드 문법(Method Syntax)
- 내부 동작 차이
- 어떤 걸 써야 하는지 실무 기준 가이드
- 실전 예제 비교
1️⃣ LINQ란?
✅ LINQ = Language Integrated Query
C# 언어 자체에서 컬렉션을 "SQL처럼" 다룰 수 있게 해주는 문법!
📌 List, 배열, DB, XML, JSON 등등
데이터 구조를 일관되게 다룰 수 있게 해주는 무기다!
2️⃣ LINQ에는 두 가지 문법이 있다!
문법 스타일 | 예시 | 장점 |
---|---|---|
쿼리 문법 | from x in list where x > 5 select x | 가독성 좋고 SQL 느낌 |
메서드 문법 | list.Where(x => x > 5).Select(x => x) | 체이닝 편하고 표현력 강함 |
🔔 둘은 완전히 동등하다! (컴파일러가 내부에서 메서드 문법으로 변환한다)
3️⃣ 쿼리 문법 (Query Syntax)
✅ SQL이랑 비슷하게 생김 → 초보자도 친숙하다
var result = from x in numbers
where x > 5
orderby x descending
select x;
🧠 특징:
- from, where, orderby, select, join 등 SQL과 유사
- 단점: 복잡한 조건, 그룹핑, 다중 컬렉션 처리에서 표현력 한계 있음
4️⃣ 메서드 문법 (Method Syntax)
✅ 더 많이 쓰이는 스타일. 람다 + 체이닝 기반
var result = numbers
.Where(x => x > 5)
.OrderByDescending(x => x)
.Select(x => x);
🧠 특징:
- 익숙해지면 더 직관적이고 강력함
- 메서드 체인으로 연결하니 조건, 그룹핑, Join, Aggregate 전부 가능
- 실무/라이브러리에서 거의 대부분 메서드 문법 쓴다
5️⃣ 쿼리 vs 메서드 예제 비교
🧪 예제: 5보다 큰 수만 필터링 후 제곱해서 내림차순 정렬
쿼리 문법
var result = from x in numbers
where x > 5
orderby x descending
select x * x;
메서드 문법
var result = numbers
.Where(x => x > 5)
.OrderByDescending(x => x)
.Select(x => x * x);
6️⃣ 복잡한 조건은 메서드 문법이 짱이다
var result = people
.Where(p => p.Age > 20 && p.Name.StartsWith("J"))
.OrderBy(p => p.Name)
.ToList();
✅ 이거 쿼리 문법으로 쓰려면 정신 나간다
→ 그래서 실무는 거의 다 메서드 문법으로 간다!
7️⃣ 내부적으로는 어떻게 동작하는가?
- 쿼리 문법 👉 컴파일러가 메서드 체이닝 코드로 바꿔줌
- from x in list where x > 5 select x
⏩ list.Where(x => x > 5).Select(x => x)
✅ 즉, 결국엔 다 메서드 호출이다!
8️⃣ 실무에서 어떤 걸 써야 할까?
상황 | 추천 문법 |
---|---|
초보자에게 친숙한 코드 | 쿼리 문법 |
간단한 필터링/정렬 | 쿼리 or 메서드 둘 다 OK |
복잡한 조건, Join, Grouping | 무조건 메서드 문법 |
성능 디버깅, 예외 처리 | 메서드 문법 (에러 위치 추적 쉬움) |
9️⃣ LINQ로 많이 쓰는 패턴 요약
// 필터링
.Where(x => x.IsActive)
// 정렬
.OrderBy(x => x.Name)
.OrderByDescending(x => x.Score)
// 변형
.Select(x => new { x.Name, x.Age })
// 그룹화
.GroupBy(x => x.Category)
// 집계
.Count(), Sum(), Average(), Max()
// 확인
.Any(x => x.IsAdmin), All(x => x.Age > 18)
✅ 진짜 실무에서 자주 보는 코드 패턴들이다!
✅ 최종 요약
항목 | 요약 |
---|---|
LINQ | 컬렉션/데이터를 쉽게 다루는 쿼리 도구 |
쿼리 문법 | SQL 느낌, 초보자 친화 |
메서드 문법 | 강력한 람다식 기반, 실무 주력 |
내부 동작 | 쿼리 문법도 결국 메서드 체이닝으로 바뀜 |
추천 | 실무는 메서드 문법 중심, 익숙해질수록 강력함! |
📢 다음 챕터 예고 🎓
다음 챕터 | 주제 |
---|---|
Chapter 2.5 | 파일 입출력, 로그 남기기 – NLog, Serilog 예제 |
728x90