■ 개요
○ 오늘 계획
- 에너미 씬 이동시 위치 초기화
- 명성치 점수 적용
- 에너미 데이터베이스 스탯 연결 -> 값 변경까지
- 에너미 셋 함수(스탯도 적용되게 변환)
■ LINQ (Language Integrated Query)
○ LINQ란?
- .NET 프레임워크에서 제공되는 쿼리 언어 확장
- 데이터 소스(예: 컬렉션, 데이터베이스, XML 문서 등)에서 데이터를 쿼리하고 조작하는데 사용됨
- 데이터베이스 쿼리와 유사한 방식으로 데이터를 필터링, 정렬, 그룹화, 조인 등 다양한 작업을 수행할 수 있음
- LINQ는 객체, 데이터베이스, XML 문서 등 다양한 데이터 소스를 지원함
○ 주요특징
- 통합된 문법
- SQL, XML, 컬렉션 등 다양한 데이터 소스를 동일한 문법으로 처리 가능.
- 다양한 데이터 소스와 일관된 프로그래밍 경험 제공.
- 표현식 기반
- LINQ 쿼리는 C# 코드로 작성되므로 타입 검사, IntelliSense와 같은 편리한 기능을 사용할 수 있음.
- 데이터 소스에 독립적
- LINQ는 데이터 소스의 내부 구조를 신경 쓰지 않고 데이터를 처리
- 지연 실행
- 대부분의 LINQ 메서드는 지연 실행(Lazy Evaluation)을 사용하여 결과가 실제로 사용될 때 쿼리를 실행
○ 주요 사용법
- 컬렉션 데이터 처리
- 배열, 리스트 등의 데이터 필터링, 변환, 정렬 등.
- 데이터베이스 쿼리
- LINQ to SQL, Entity Framework 등에서 SQL과 유사한 쿼리 작성.
- XML 데이터 처리
- LINQ to XML로 XML 데이터 읽기, 쓰기, 수정 가능.
- 기타 데이터 소스
○ 장단점
-
장점
- 코드 간결화: 복잡한 데이터 처리 작업을 간단히 표현.
- 가독성 향상: SQL과 유사한 쿼리 스타일로 데이터 처리를 직관적으로 이해.
- 타입 안전성: 컴파일 시간에 타입 검사 제공.
- 다중 데이터 소스 지원: 데이터베이스, 컬렉션, XML 등 다양한 소스에 사용 가능.
-
단점
- 성능 오버헤드: SQL처럼 최적화되지 않아 대규모 데이터 처리 시 성능 문제가 발생할 수 있음.
- 복잡한 쿼리 처리: 매우 복잡한 작업은 SQL로 작성하는 것이 더 적합한 경우가 있음.
- 디버깅 어려움: 체이닝된 메서드의 디버깅이 까다로울 수 있음.
○ LINQ의 기본 구문
var result = from 변수 in 데이터소스 // foreacn 문과 비슷하게 데이터 하나씩 꺼내옴
[where 조건식]
[orderby 정렬식 [, 정렬식...]]
[select 식];
- 쿼리 구문(Query Syntax): SQL과 유사한 문법으로 작성
var
키워드는 결과 값의 자료형을 자동으로 추론
from
절에서는 데이터 소스를 지정
where
절은 선택적으로 사용하며, 조건식을 지정하여 데이터를 필터링함
orderby
절은 선택적으로 사용하며, 정렬 방식을 지정
select
절은 선택적으로 사용하며, 조회할 데이터를 지정
int[] numbers = { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(num => num % 2 == 0);
foreach (var number in evenNumbers)
{
Console.WriteLine(number);
}
- 메서드 구문(Method Syntax): 메서드 체이닝 방식으로 작성
○ 간단한 예제
// 데이터 소스 정의 (컬렉션)
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 쿼리 작성 (선언적인 구문)
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
// 쿼리 실행 및 결과 처리
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
■ LINQ 자주 사용하는 메서드
○ Where
var filtered = numbers.Where(n => n > 3);
○ Select
var squares = numbers.Select(n => n * n);
○ OrderBy / OrderByDescending
var sorted = numbers.OrderBy(n => n);
○ GroupBy
var grouped = numbers.GroupBy(n => n % 2);
○ Aggregate
var sum = numbers.Aggregate((total, next) => total + next);
○ First / FirstOrDefault
var first = numbers.First(n => n > 3);
○ Any / All
var hasLargeNumber = numbers.Any(n => n > 10);
○ Count
var count = numbers.Count();