C# - LINQ1

양규빈·2023년 9월 13일
0

C# 공부

목록 보기
23/30

개요

언어에 통합된 쿼리 기능을 제공하는 프로그래밍 기술이다.
닷넷프레임워크(.NET Framework)의 일부로 제공되며 데이터를 쉽게 쿼리하고 조작할 수 있는 강력한 방법을 제공한다.

LINQ의 주요 특징과 개념
1. 통합된 쿼리 언어
2. 다양한 데이터 소스 지원
3. 표준 연산자와 메서드
4. 익명 형식(Anonymous Types)
5. 지연 실행(Lazy Evaluation)
6. 표현식 트리(Expression Trees)
7. 확장 메서드(Extension Methods)

LINQ는 컬렉션을 편리하게 사용할 수 있게 끔 제공한다.

기본적인 문법은 다음과 같다.
in : 데이터 집합
from : 대표집합
where : 조건식
select : 어떤 형태로 데이터 추출



코드 및 상세 설명

기본 사용

람다식과 LINQ를 이용하여 홀수를 추출하는 코드이다.
Linq는 in키워드를 이용하여, 전체 데이터를 선택하고
from은 전체 데이터에서 선택한 데이터이며, where로 선택한 데이터에서 조건문을 삽입할 수 있다.
이후, select를 이용하여 데이터를 최종적으로 추출한다.

Item 구조체를 만들어, 복합 데이터를 저장하도록 한다.

아이템을 값으로 가지는 리스트를 선언 및 초기화한다.

복합데이터의 기본적인 from – in – select의 구조 또한 일반적인 자료형과 크게 다르지 않다.

select를 이용하여, 복합자료형 내에서 특정 데이터만을 추출하는 것도 가능하다.
상단의 코드에서는 select를 이용하여 item의 name데이터만을 추출하도록 변형한 것이다.



IEnumerable

IEnumerable 인터페이스를 구현하는 클래스는 컬렉션을 반복하고 컬렉션의 요소에 접근할 수 있는 방법을 제공한다
단일 메서드를 정의한다. 그 메서드는 IEnumerator 인터페이스를 반환하는 GetEnumerator라는 이름의 메서드이다.
IEnumerator 인터페이스는 컬렉션 내의 요소를 반복하는 데 사용되는 메서드를 제공한다

  • IEnumerable은 컬렉션을 나타내는 인터페이스이다.
  • IEnumerable은 컬렉션을 반복하는 데 사용되는 열거자(IEnumerator 객체)를 반환하는 GetEnumerator() 메서드를 정의
  • GetEnumerator() 메서드를 호출하면 IEnumerator 객체가 반환되며, 이를 통해 컬렉션의 요소에 반복적으로 엑세스할 수 있다.
  • IEnumerable은 foreach 루프와 함께 사용하여 컬렉션의 요소를 반복하고 각 요소에 대해 작업을 수행하는 데 유용

IEnumerable의 기초는 내부적으로 IEnumerator 가 동작된다는 것이다.
데이터를 보낼 때, Currnet – MoveNext 과정을 통해서 보낸다.

IEnumerable은 컬렉션의 데이터 리턴값 또는 파라미터로 이용한다.
예시) public IEnumerable 함수
IEnumerable은 데이터의 첨가나 삭제를 지원하지 않는다. 그렇기에 읽기, 정렬, 선별의 목적으로 사용된다.

IEnumerableForeach 클래스의 인스턴스를 생성하고, 해당 인스턴스의 GetList 메서드를 호출하여 반환되는 IEnumerable 컬렉션을 변수 datas에 할당한다.

IEnumerableForeach 클래스는 IEnumerable을 사용하여 컬렉션 데이터를 반환하는 메서드를 구현한다.

GetList 메서드는 yield return 키워드를 사용하여 컬렉션의 각 요소를 순차적으로 반환한다.

GetIntList 메서드는 제네릭 버전인 IEnumerable<int>를 반환하며, GetList와 동일한 방식으로 요소를 반환한다.

PrintData와 PrintDataNonGeneric 메서드는 IEnumerable 또는 IEnumerable<T>를 인자로 받아 데이터를 출력한다. PrintData는 제네릭 버전으로 요소의 타입을 지정하여 출력하며, PrintDataNonGeneric은 제네릭이 아닌 버전으로 요소의 타입을 알 수 없는 경우에 사용한다.



IEnumerator

IEnumerator은 컬렉션의 요소를 반복하는 데 사용되는 인터페이스
IEnumerator은 컬렉션 내의 개별 요소에 접근하고 값을 검색하는 데 사용되는 멤버들을 정의한다.
IEnumerator의 주요 멤버는 Current, MoveNext(), Reset()가 있다.

Current 속성은 현재 위치의 요소를 가져온다.
MoveNext() 메서드는 다음 요소로 이동하며, 이동이 가능한 경우 true를 반환한다.
Reset() 메서드는 열거자를 초기 상태로 되돌린다.

IEnumerator은 컬렉션의 요소를 반복하고 엑세스하는 데 사용되는 인터페이스이고,
IEnumerable은 컬렉션을 나타내고 컬렉션의 요소에 반복적으로 엑세스하는 데 사용되는 인터페이스

다음과 같이, 사용자 정의 IEnumerator 클래스를 만들어 컬렉션의 요소를 반복하는데 사용할 수 있다.

IEnumeratorClass 클래스는 IEnumerable과 IEnumerator 인터페이스를 구현한다.
arrayObeject는 object 형식의 배열로, 요소를 저장하는 데 사용되며, 생성자 호출 시에 값이 초기화된다.

index는 현재 인덱스를 저장하는 프로퍼티이며,
Current 프로퍼티는 현재 인덱스에 해당하는 요소를 반환한다.

MoveNext 메서드는 인덱스를 증가시키고, 배열 범위 내에 있는 경우에만 true를 반환하여, 범위를 벗어나지 않도록 해준다.
Reset 메서드는 인덱스를 초기화한다.

GetEnumerator 메서드는 인덱스를 초기화하여 처음부터 시작하도록 하고, 현재 객체(IEnumeratorClass)를 반환한다.

사용자 정의 IEnumerator 클래스의 사용예시이다.
객체를 생성하여 IEnumeratorClass의 인스턴스 만든다.
PrintDataNonGeneric 메서드를 호출하여 myIEnumerator 객체의 요소를 출력하는데, 이 메서드는 제너릭이 아닌 IEnumerable을 사용하여 요소를 출력한다.

myIEnumerator 객체의 GetEnumerator 메서드를 호출하여 IEnumerator 객체 iec를 가져온다.
while 루프를 사용하여 iec.MoveNext()를 호출하고, 다음 요소가 있을 때까지 반복하여 요소를 출력한다.
MoveNext는 다음 요소가 존재할 때만, true를 반환하기 때문에 반복문의 조건문으로 사용하는 것이 가능하다.

profile
훌륭한 개발자를 꿈꾸는 중입니다

0개의 댓글