본문 바로가기
프로그래밍/C#

IEnumerable vs IQueryable 어떻게 다른지 알아보자

by bantomak 2024. 9. 25.
반응형

IEnumerable과 IQueryable에 대해서

처음에는 이 둘이 한쌍으로 묶일 거라고는 전혀 상상하지 못했다. 일단 이름부터 너무 다르지 않은가?

하지만 이 둘을 묶어서 비교하다보면 같이 설명하는 이유에 대해서 알게 될 것이다.

IEnumerable

LINQ-to-Object가 작동하도록 하는 인터페이스이다.

 

public IEnumerable<T> getListCode(string code)
{
    return _dbset.Where(p => p.Code == code);
}

해당 구문을 실행하게 되면 DB 테이블을 통으로 조회를 한 후 서버 메모리에 로드하고 처리하게 된다.

 

ex) select * from table명

All Recoreds를 조회한 후 서버단에서 필터링한다.

IQueryable

LINQ-to-SQL이 작동하도록 하는 인터페이스이다.

 

public IQueryable<T> getListcode(string code)
{
	return _dbset.Where(p => p.Code = code);
}

해당 구문을 실행하게 되면 WHERE 조건이 걸린 쿼리가 데이터베이스 내부에서 실행되고 해당 결과를 서버단 메모리에 로드한다.

 

ex) select * from table명 where Code = code

DB단에서 필터링한 결과를 가져온다.

IEnumerable vs IQueryable

이 둘의 가장 큰 차이점은 IQueryble<T>는 LINQ-to-SQL이 작동할 수 있도록 하는 인터페이스라는 점이다. 이에 반해 IEnumerable<T>는 LINQ-to-Object로 작동하는 인터페이스이다.

 

IQueryable<T>를 사용하면 많은 데이터를 로드할 필요 없이 원하는 필터링만 조회할 수 있다.

IEnumerable<T>를 사용하면 모든 행이 메모리에 로드된다.

  • IEnumerable 소량의 데이터에 적합
  • IQueryable 대량의 데이터에 적합

함께 읽으면 좋은 글

 

C# IEnumerable, IEnumerator에 대해서

IEnumerator 열거자를 구현하는데 필요한 인터페이스, 클래스 내부의 컬렉션에 대해 반복할 수 있도록 도와준다. public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } IEnumerator는 반복

jettstream.tistory.com

 

Effective C# Item 42 : IEnumerable<T> 데이터 소스와 IQueryable<T> 데이터 소스를 구분하라

IEnumerable 데이터 소스와 IQueryable 데이터 소스를 구분하라IQueryable와 IEnumerable는 거의 동일한 API 정의를 가진다. 따라서 이 두 인터페이스는 상호 교환 가능하다고 생각할 것이며 실제로도 대

jettstream.tistory.com

참고 사이트

 

IQueryable vs IEnumerable 차이점

평소에 작업을 복사 붙여넣기만 하다보니 그 구문을 왜쓰는지 모르고 그냥 작성하다보니 안좋은 습관만점점늘어가는거같아서 "왜? 이걸썻을까 무슨생각으로 썻을까" 라는 마인드를 가지고 이

moonna.tistory.com

 

https://jhyeok.com/ienumerable-vs-iqueryable/

이 글은 처음에 IEnumerable vs IQueryable 관련된 여러 글을 읽었는데 가장 이해가 잘 되었던 stackoverflow의 글을 참고해서 적은 글이다. IEnumerable vs IQueryable 차이점은 IQueryable 는 LINQ-to-SQL(LINQ.-to-anything)

jhyeok.com

댓글