본문 바로가기
C#

C#] IEnumerable vs Enumerable 차이점

by Fastlane 2023. 1. 9.
728x90
반응형

IEnumerable 

interface

Namespace : System.Collections

하나의 메소드(GetEnumerator())만 가지고 있다. 

IEnumerable<T>의 메서드만 확인해보면, GetEnumerator()를 확인할 수 있다. 나머지 함수들은 System.Object class에서 제공하는 함수들이다. 

Enumerable 

class

Namespace : System.Linq

대부분의 함수들은 IEnumerable<T> 확장 함수(Extension Method)를 가지고 있다. 따라서 IEnumerable<T>를 구현하는 모든 object에서 instance method처럼 호출해서 사용할 수 있다. 

Extension Methods in IEnumerable

Extension Method란?

static class 안에 static method

클래스에 직접 메서드를 추가하지 않고, 외부에서 정의함으로 마치 그 클래스의 기능을 확장한 인스턴스 메서드를 추가한 것처럼 사용할 수 있다. 

함수의 첫번째 파라미터로 클래스 타입을 지정한다. 

 

Cast<TResult>

generic method

ArrayList처럼 non-generic type에서 LINQ를 사용할 수 있도록 한다. 

var primes = new ArrayList
{
    5,
    3,
    2,
    7
};
var primeQuery = primes.Cast<int>().OrderBy(prime => prime).Select(prime => prime);

OfType<TResult>

특정 타입만 필터링 한다. 

var cities = new ArrayList
{
    "London",
    "Paris",
    "Madrid",
    "Berlin",
    7,
    "Lisbon"
};
var cityQuery = cities.OfType<string>();

AsQueryable

IEnumerable을 IQueryable로 convert한다. 

IEnumerable은 client side에서 LINQ를 사용하여 로드된 collections에 적합하고, IQueryable은 server side에서 가져올 데이터의 SQL Query를 작성하여, 필터된 데이터를 client side로 보낸다.

 

 

728x90
반응형

댓글