내일배움캠프 55일차 TIL : LINQ

woollim·2024년 12월 10일
0

내일배움캠프TIL

목록 보기
48/65
post-thumbnail

■ 개요

○ 오늘 계획

  • 에너미 씬 이동시 위치 초기화
  • 명성치 점수 적용
  • 에너미 데이터베이스 스탯 연결 -> 값 변경까지
  • 에너미 셋 함수(스탯도 적용되게 변환)


■ 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 데이터 읽기, 쓰기, 수정 가능.
  • 기타 데이터 소스
    • JSON, 파일 데이터 등.

○ 장단점

  • 장점

    • 코드 간결화: 복잡한 데이터 처리 작업을 간단히 표현.
    • 가독성 향상: 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();

0개의 댓글