본문 바로가기
Programming/C# & .NET

[C#] IEnumerable / ICollection / IList 차이점

by Kor-IT 2022. 3. 7.
반응형

IEnumerable, ICollection, IList 에 대해 알아보겠다.

 

IEnumerable, ICollection, IList 3가지 모두 System.Collections 네임스페이스이다.

using System.Collecionts
[Envrionment]
OS : Windows 10
Tool : Visual Studio 2022
Framework : .Net 6

 

IEnumerable, ICollection, IList 는 반복할 수 있도록 하는 인터페이스이다. 하지만 3가지 모두 컬렉션을 실행한다는 점에서는 동일하지만 각자 사용할 수 있는 범위가 다르다.

 

 

1. IEnumerable

IEnumerable 는 모든 열거자의 기본 인터페이스이다. 열거자를 사용하여 컬렉션의 데이터를 읽을 수는 있지만 내부 컬렉션을 수정할 수는 없다. 단순 Loop 를 사용하여 반복순회하는 경우에 적합하다.

속성 설명
Current 컬렉션에서 열거자의 현재 위치에 있는 요소를 가져온다.
메서드 설명
GetEnumerator() 컬렉션을 반복하는 열거자를 반환한다.
MoveNext() 컬렉션의 다음 요소로 이동한다.
Reset() 컬렉션의 첫 번째 요소 앞의 초기 위치에 열거자를 설정한다.

 

IEnumerator enumerator = list.GetEnumerator();

while (enumeraotr.MoveNext())
{
	...
}

foreach (var item in list)
{
	...
}

 

컬렉션을 단순 반복 읽어와 처리할 때 유용하며 컬렉션의 수정이 되지 않으므로 캡슐화가 제공된다.

 

 

 

2. ICollection

ICollection 는 IEnumerable 를 상속받는 확장되었다. 그러므로 IEnumerable 보다 특수화 된 인터페이스이다.

컬렉션의 요소에 액세스가 가능해진다.

속성 설명
Conut ICollection<T>에 포함된 요소 개수를 가져온다.
IsReadOnly ICollection<T>가 읽기 전용인지 여부를 나타낸다.
메서드 설명
Add(T) ICollection<T>에 항목을 추가한다.
Clear() ICollection<T>에서 항목을 모두 제거한다.
Contains(T) ICollection<T>에 특정 값이 들어있는 여부를 확인한다.
CopyTo(T[], INt32) 특정 ICollection<T> 인덱스부터 시작하여 Array의 요소를 Array에 복사한다.
GetEnumerator() 컬렉션을 반복하는 열거자를 반환한다.
Remove(T) ICollection<T>에서 맨 처음 발견되는 특정 개체를 제거한다.

 

 

 

3. IList

IList 는 인덱스롤 각각 액세스할 수 있는 제네릭이 아닌 개체 컬레션이다. 

IEnumerable, ICollection Interface 를 모두 상속 받는다. 요소를 추가, 삭제를 허용하며 index 형식으로 요소에 접근 가능하다.

속성 설명
Count ICollection 에 포함된 요소 수를 가져온다.
IsFixedSize IList의 크기가 고정되어 있는지 여부를 가져온다.
IsReadOnly 일기 전용인지 가져온다.
IsSynchronized 엑세스가 동기화되어 스레드로부터 안전하게 보호되는지를 알 수 있다.
Item[Int32] 지정한 Index의 요소를 가져오거나 설정할 수 있다.
SyncRoot ICollection에 대한 액세스를 동기화하는데 사요할 수 있는 개체를 가져온다.
메서드 설명
Add(Object) Object 항목을 추가한다.
Clear() 항목을 모두 제거한다.
Contains(Object) 특정값이 들어 있는지 여부를 확인한다.
CopyTo(Array, Int32) 특정 인덱스부터 시작하여 Array의 요소를 복사한다.
GetEnumerator() 컬레션을 반복하는 열거자를 반환한다.
IndexOf(Object) 특정 항목의 인덱스를 결정한다.
Insert(Int32, Object) 지정된 Index에 삽입한다.
Remove(Object) 맨 처음 발견되는 특정 개체를 제거한다.
RemoveAt(Int32) 지정한 Index부터 항목을 제거한다.

 

 

 

 

반응형

댓글