컬렉션3 : IEnumerable 과 IEnumerator 인터페이스 :: C# 인트로[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

C# 인트로
[1]
등록일:2008-03-27 20:04:35 (0%)
작성자:갤러리정
제목:컬렉션3 : IEnumerable 과 IEnumerator 인터페이스

7.3 IEnumerable IEnumerator 인터페이스

 

특정 클래스가 IEnumerable 인터페이스를 구현했다면, Enumerator 사용해서 내부의 데이터를 순방향으로만 접근할 있도록 지원한다는 것을 의미합니다. , Enumerable이라는 영어 철자 그대로 나열할 있다는 뜻입니다. Enumerator형으로 얻은 객체는 읽기전용 커서(Cursor) 제공하고 있으며 데이터의 집합에 대한 순방향용으로 검색할 있습니다. IEnumerable 인터페이스에는 GetEnumerator() 메서드를 사용하여 IEnumerator 얻어서 작업을 합니다. 다음은 IEnumerable 인터페이스의 프로토타입입니다.

 

IEnumerable 인터페이스의 메서드

                public interface IEnumerable {

                   IEnumerator GetEnumerator();

                }

 

 

IEnumerable 인터페이스

IEnumerable 인터페이스는 내부에 GetEnumerator() 추상메서드(Abstract Method) 포함하고 있으며 메서드를 이용하여 Enumerator 인스턴스를 얻을 있습니다. Enumerator 현재 커서 위치에서 데이터를 추출하는 기능을 지원하며, 커서를 데이터 집합의 시작점으로 돌리는 기능도 제공합니다. 물론, 순방향으로 검색기능을 제공하는 것은 당연한 소리입니다. 예를 들어, Array 타입은 IEnumerable 인터페이스를 지원합니다. 배열은 Array 클래스를 상속하고 있으며 Array 클래스는 인터페이스를 구현하였기 때문에 IEnumerator 사용할 있는 것입니다. 다음 프로그램은 배열에서 IEnumerable 인터페이스를 사용하는 방법을 보여주는 예제입니다.

 

&

IEnumerableTest.cs

Ü IEnumerable 테스트하는 예제

using System;

using System.Collections;


public class IEnumerableTest {
  
public static void Main
() {
    string[ ] authors = {
"A","B","C","D","E","F"
};
    IEnumerator e = authors.GetEnumerator();
    
while
(e.MoveNext()) {
      Console.WriteLine(e.Current);
    }
  } 
//main
//class

C:\C#Example\07>csc IEnumerableTest.cs

C:\C#Example\07>IEnumerableTest

A

B

C

D

E

F

 

프로그램은 6개의 문자를 보관하는 authors라는 스트링(String) 배열을 선언하였습니다.

 

string[ ] authors = {"A","B","C","D","E","F"};

 

Enumerator 객체를 얻기 위해서 authors.GetEnumerator() 호출되었습니다. 모든 배열은IEnumerator 인터페이스를 구현해 놓았으므로 배열에 대해서 GetEnumerator() 메서드를 호출할 있습니다.

 

IEnumerator e = authors.GetEnumerator();

 

Enumerator 객체를 얻은 순방향으로 순회하기 위해서 while 루프에서 MoveNext() 메서드를 호출하고 있습니다. 그리고, MoveNext() 커서를 움직인 현재의 커서가 위치한 곳에 데이터를 추출하기 위해서 Current 속성을 이용하고 있습니다. Current 타입은 Object형입니다.

 

while(e.MoveNext() == true) {

Console.WriteLine(e.Current);

}

 

IEnumerator 대해서 조금 알아보도록 하겠습니다.

 

IEnumerator 인터페이스

IEnumerator 내부에서 IEnumerable 사용하는 인터페이스로서 데이터의 검색 기능을 제공해 줍니다. 다음은 IEnumerator 인터페이스 내부의 멤버를 보여주고 있습니다. IEnumerator 사용한다는 것은 다음 멤버 3개를 사용하는 것과 같습니다.

 

IEnumerator 속성

object Current

·   컬렉션에서 현재 객체에 대한 참조(Element) 반환하는 읽기전용 속성

 

IEnumerator 메서드

bool MoveNext();

·   열거자를 컬렉션의 다음 요소(Element) 커서를 이동시킨다.

·   다음 요소가 존재하지 않는다면 false 존재한다면 true 리턴한다.

·   커서를 이동시킨 Current 속성을 이용하여 데이터를 추출할 있다.

void Reset();

·   Current 포인터를 컬렉션의 처음 부분 앞에 있는 정의하지 않은 값으로 다시 설정한다.

·  Reset 호출한 Current 접근하기 전에 MoveNext() 호출해야 한다. 이유는 처음에는 Current 참조가 정의되어 있지 않기 때문이다.

 

 

그림 7-2 Enumerator에서의 커서

 

Enumerator 객체가 생성될 항상 처음의 인덱스보다 앞에 위치하게 됩니다. 데이터를 추출하기 전에 MoveNext() 메서드를 호출하여 커서의 위치를 추출하고자 하는 데이터의 위치로 이동시켜 주어야 합니다. 그리고, Current 속성을 이용하여 데이터를 추출합니다. Enumerator 객체가 컬렉션의 마지막 위치에 있을 MoveNext() 메서드를 호출하면 false 반환됩니다. 따라서, 컬렉션 내의 모든 데이터에 대해서 MoveNext() 메서드가 true 반환하는 동안은 루프를 수행하면서 false 반환되면 빠져 나오는 방법으로 데이터를 검색할 있습니다. 검색을 하는 도중 커서의 위치를 처음으로 되돌리고자 한다면 Reset() 메서드를 사용하시면 처음으로 커서를 되돌려 줍니다.

 

결론적으로 IEnumerator 인터페이스는 열거형태로 되어 있는 System.Object 타입의 집합에 대해 순차적으로 접근할 있는 메서드를 가지고 있습니다. IEnumerator 인터페이스를 상속한 클래스는 컬렉션을 열거할 있기 때문에 모든 요소(Element) 접근할 있습니다.
[본문링크] 컬렉션3 : IEnumerable 과 IEnumerator 인터페이스
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=3056
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.