C# – Collection : IEnumerable 인터페이스 상속 과 구현
일반적으로 한 번에 많은 자료를 다루기 위해서 Array ,List 및 Dictionary 처럼 배열 구조를 가지는 Collection 객체들을 활용한다. 그리고 그 객체들을 순차/반복적인 접근하기위해 foreach 와 같은 함수를 활용하여 접근을 하는데, 내가만든 Collection(클래스) 객체도 foreach 에서 순차적으로 접근하여
처리 할 수 있도록 IEnumerable 인터페이스를 상속하여 구현해보자.
[IEnumerable] 컬렉션의 인터페이스 | [IEnumerator] 열거자 인터페이스 |
namespace System.Collections { public interface IEnumerable { IEnumerator GetEnumerator(); } } | namespace System.Collections { public interface IEnumerator { object? Current { get; } bool MoveNext(); void Reset(); } } |
IEnumerable 인터페이스는 GetEnumrator() 메서드를 통해
IEnumerator (인터페이스) 를 리턴하기때문에 , 사용자는 foreach 구문과 같은 반복분을 통해
linked 타입의 Collection 을 만들기 위해서는 IEnumerable 인터페이스를 상속 하면된다.
//————————————————————————–
// 회원 정보 관리를 위한 Member 클래스
class Member {
int age;
//————————————————————————–
// 회원 정보 처리를 위한 MemberManager 클래스
ArrayList _memberList;
//————————————————————————–
public void main()
{
MemberManager mm = new MemberManager();
mm.add( new Member(“이순신” , “군인” , 20);
mm.add( new Member(“홍길동” , “백수” , 30);
mm.add( new Member(“아이공룡” , “동물” , 20);
}
[클래스 수정]
————————————————————————————————
// IEnumerable를 상속받고 GetEnumerator() 메서드 구현
ArrayList _memberList;
{
// GetEnumerator() 메서드를 새로 코드로 구현한다기보다
// ArrayList 객체인 _memberList 자체가 이미 가지고있는 _memberList.GetEnumerator()
// 를 리턴해주면 IEnumerator 인터페이스 타입의 객체를 리턴함
return this._memberList.GetEnumerator();
}
// 위에 소스를 다시실행해 보면 정상적으로 실행됨