😃 최근에 회사 코드를 List에서 IEnumerable 코드로 몇몇개 바꾸면서 무슨 차이가 있는지 정리해 보았다.
📚 기본 개념
항목 | IEnumerable | List |
정의 | 읽기 전용의 순차열 인터페이스 | 요소 추가/삭제 가능한 가변 컬렉션 클래스 |
자료형 | 인터페이스 | 클래스 |
접근 방식 | foreach만 가능 | foreach, list[i] 등 다양한 접근 가능 |
가공 특성 | Linq 사용시 지연실행 | 모든 요소가 메모리에 있어 즉시 사용 가능 |
지연실행 ?
- 실제로 사용될 때까지 실행을 미루는 것
- 즉 코드는 써도 당장 실행되지 않고 foreach 등으로 순회할 때 실행된다는 뜻
📚 주요 기능 비교
기능 | IEnumerable | List |
요소 추가 / 삭제 | 불가능 | Add(), Remove() 가능 |
인덱스 접근 | 불가능 | list[i] O(1) 가능 |
Linq 사용 | 매우 유용 | 가능하지만 지연 실행 아님 |
성능 | 1회 순회 시 유리 | 다회 순회 및 수정시 유리 |
📚 어떤 상황에 어떤 걸 써야 할까?
상황 | 추천 타입 | 이유 |
단순 순회만 필요할 때 | IEnumerable<T> | 가볍고 메모리 효율적 |
요소를 추가/삭제해야 할 때 | List<T> | Add(), Remove()등 수정 기능 사용가능 |
여러 번 순회하거나 캐싱 필요할 때 | List<T> | 메모리에 있으므로 재사용 유리 |
API 응답으로 DTO 전할 때 | IEnuerable<T> | 외부에서 유연하게 사용할 수 있음 |