LINQ를 처음 접하는 사람은 LINQ 쿼리(Query)를 새롭게 배우기 때문에 큰 어려움이 없지만,
Database를 다뤄본 개발자라면 SQL(Structured Query Language)를 알고 있어
LINQ Query와 혼동하는 경우가 있어 의외로 어렵다고 생각할 수 있다.
필자 또한 SQL에 너무 익숙하여 처음 LINQ를 접했을 때 어렵다고 생각했지만,
바쁜 개발 일정 탓에 LINQ Query에 대해 제대로 알아보지 못한 채로 개발을 했기 때문인 것 같다.
이번 게시물을 통해서 필자와 같은 어려움을 겪는 Junior 개발자에게 도움이 되었으면 하는 마음으로
LINQ Query의 개념부터 설명하고자 한다.
LINQ Query (쿼리) 알아보기
동작 방식 이해
LINQ Query 작업은 1) 데이터 소스 연결, 2) 쿼리(Query) 작성, 3) 쿼리(Query) 실행의 3가지 단계로 작업이 실행된다.
여기에서 유의할 점은 쿼리를 작성하는 시점에 실행되지 않는다는 점을 기억하자
일반적인 SQL 처리 방식과 LINQ Query 처리 방식을 비교해서 설명하면 이해가 더 쉬울 것이다.
1) 일반적인 SQL 처리 방식
//일반적인 SQL 처리 방식
var qry = "SELECT name,company FROM Cars";
//SQL 쿼리 실행
var cmd = new SqlCommand(qry, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
List<Car> cars = new List<Car>();
foreach (DataRow dr in dt.Rows)
{
Car item = new Car();
item.Name = dr["name"].ToString().Trim();
item.Company = dr["company"].ToString().Trim();
cars.Add(item);
}
conn.Close();
da.Dispose();
2) LINQ 처리 방식
//LINQ Query 처리 방식
List<int> numbers = new List<int> { 1, 5, 2, 8, 3, 9, 4, 6, 7, 10 };
//Query 작성만으로 실행 되지 않음
IEnumerable<int> oddQuery =
from number in numbers
where number % 2 == 1
orderby number ascending
select number;
//이 시점에 LINQ 실행 됨
foreach (var number in oddQuery)
{
Console.WriteLine(number);
}
3) SQL Query vs LINQ Query 실행 시점 비교
위 소스 코드에서 설명한 것처럼, SQL Query의 경우 Sqlcommand 시점에 실행되지만,
LINQ의 경우 SQL처럼 실행하라는 특별한 명령이 보이지 않아서 쿼리 작성 시점에 실행되는 것처럼 착각할 수 있다.
하지만, 실행 시점은 foreach를 통해 실행되면서 값을 가져오는데 이를 지연된 실행 (Deferred Execution)이라고 한다.
모두 지연된 실행을 하는 것은 아니고 추후에 소개할 Count, Max, Average, First 등과
ToList, ToArray 메서드를 이용하면 즉시 실행하여 반영한다.
실제 디버깅 모드로 진입 후 테스트 해보면 명확히 알 수 있으니 가능하면 테스트 해보길 바란다.
4) 쿼리 작성 방법 (기본)
LINQ 쿼리 작성 방법은 추후 게시물에서 자세하게 소개할 예정이니 이번 게시물에서는 가장 기본적인 형태만 설명한다.
SQL Query는 select, from, where 순으로 쿼리를 작성하지만
LINQ Query는 from, where, select 순으로 쿼리를 작성하며 orderby, groupby 등은 select 이전에 작성하도록 되어 있어 SQL과 차이를 확인할 수 있다.
이번 게시물에서는 Database SQL Query와 LINQ Query의 차이점을 간단하게 소개하였다.
DB SQL문에 익숙한 개발자라면 반드시 필자가 소개한 몇 가지 사항을 숙지하면
LINQ Query를 이용한 Junior 개발자에게 많은 도움을 줄 수 있을 것으로 기대한다.
다음 게시물을 통해서 C#의 핵심인 LINQ에 대한 폭넓은 이해를 제공하도록 하겠습니다.
'코딩강좌 > LINQ' 카테고리의 다른 글
LINQ - ToList, ToArray, ToDictionary, ToLookup 알아보기 (1) | 2023.12.29 |
---|---|
LINQ Query 강좌 - from, select, group, let, join (0) | 2023.11.16 |
LINQ Query Expression (쿼리 식), 쿼리 변수 배우기 (0) | 2023.11.13 |
C#의 핵심은 LINQ입니다. LINQ 알아보기 (0) | 2023.11.07 |