오늘은 LINQ에 대해서 공부한 내용을 블로그로 정리해볼 것 입니다.
아직 학교에서 배우지는 않은 내용이지만 게임 개발을 하다보면 너무나도 많이 필요성을 느끼기 때문에 예습하는 느낌으로 배웠습니다.
매번 GPT 돌려서 LINQ식을 가져오기도 번거롭기 때문입니다.
LINQ는 단순 배열뿐만 아니라 IEnumerable기반인것은 모두 적용시켜 사용할 수 있습니다.
때문에 LINQ는 한번 배워두면 다양한 분야로 확장시키기 좋을 것 같습니다.
LINQ를 사용하는 방식은 두가지가 있는데, 쿼리식과 메서드 체이닝입니다.
그런데, 나는 메서드 체이닝을 사용하는것을 선호합니다. 쿼리식은 SQL에 익숙한 개발자에게 더욱 친숙한 것일 뿐더러(필자는 정보처리기능사 자격증을 준비할때 빼고는 SQL을 사용해본적이 없습니다.) 컴파일러는 SQL식을 메서드 체이닝 으로 바꿔서 컴파일하기 때문입니다. 또한 메서드 체이닝 이 좀 더 많은 연산자를 제공하는 것도 이유중 하나입니다.
그래서 블로그도 메서드 체이닝 기준으로 쓸 것 입니다.
우선 LINQ에 대해 매우 기초적인 것 부터 짚고 넘어갈 것 입니다.
필자는 기초를 배우지 않고 무작정 LINQ를 사용하려 했기 때문에 어려움을 겪었습니다.
첫번째로, LINQ는 지연실행 방식을 사용합니다.
즉, LINQ가 실행되는 시점은 LINQ식이 작성된 시점이 아니라 결과를 실제로 사용하는 시점입니다.
다음 코드를 예로 들어보겠습니다.
int[] numbers = { 1, 2, 3, 4, 5 };
var query = numbers.Where(n => n > 2);
numbers[2] = 100;
foreach (var n in query)
Console.WriteLine(n);
위 코드는 100, 4, 5을 출력합니다.
이처럼 LINQ는 지연실행을 사용한다는 것을 알 수 있습니다.
단, Count(), Sum(), ToList()등은 즉시실행입니다.
두번째로는, LINQ 메서드 체이닝 식을 예시로 들어보며 내부 구조를 간단히 알아보겠습니다.
다음은 2의 배수인 수들만 새롭게 담은 result 리스트를 만들어내는 코드입니다.
List<int> numbers = new() { 1, 2, 3, 4, 5, 6 };
var result = numbers
.Where(n => n % 2 == 0)
.Select(n => n * 10)
.ToList();
Where은 2로 나누어 떨어지는가를 검사하는 필터역할, Select는 모든 걸러진 수들에 10을 곱하는 역할, ToList는 수들을 List로 만들어주는 역할을 합니다.
Where절부터 내부구조를 뜯어볼건데, LINQ-2로 돌아오겠습니다
감사합니다
'공부블로그' 카테고리의 다른 글
| [공부 블로그] 메서드 오버로딩 (0) | 2025.11.15 |
|---|---|
| [공부 블로그] 모노싱글톤 (0) | 2025.11.06 |
| [공부 블로그] Base 키워드 (0) | 2025.10.16 |
| [공부 블로그] 유니티 FSM에 대하여 - 2 (0) | 2025.09.13 |
| [공부블로그] 유니티 FSM에 대하여 - 1 (0) | 2025.09.13 |