ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알기 쉬운 JAVA Enumeration과 Iterator 인터페이스에 대해 알아보자
    프로그래밍/JAVA 2020. 5. 14. 22:42

    Enumeration과 Iterator 인터페이스

    Enumertation<E>와 Iterator<E>는 주로 ArrayList, Vector, HashMap 등 컬렉션과 자주 쓰이며 배열에서 반복문을 이용하여 데이터를 출력하는 것과 같이 반복문을 통해 데이터를 한번에 출력할 수 있도록 도와준다.
    둘의 기능은 거의 비슷하며 가능하면 Enumeration 대신 Iteration를 사용을 권장하고 있다.

    1. Enumeration

    Enumeration<E>과 Iterator<E>는 객체들을 집합체 형태로 관리하게 해주는 인터페이스다.

    이 인터페이스에는 각각의 객체들을 한 번에 하나씩 처리할 수 있는 메소드를 제공 한다.

    논리적인 커서가 존재하여 커서를 이동하면서 데이터를 꺼내온다.

    Enumeration과 함께 쓰이는 메소드

    boolean hasMoreElements() : boolean 타입을 반환

    현재 커서 이후에 요소들이 있는지 여부를 체크한다.
    요소가 있으면 true, 없으면 false를 반환한다.
    (맨처음 커서는 첫번째 요소 직전에 위치)

     

    E nextElement() : E 타입을 반환(E는 Enumeration 객체를 생성할 때 쓰는 타입과 동일하게 지정한다.)

    커서를 다음 요소로 이동 시키고, 가리키고 있는 요소 객체를 꺼내 반환한다.

    Vector에서 Enumeration 사용 방법

    1. Integer 유형을 담을 Vector 객체를 생성하고 데이터를 삽입한다.

    import java.util.*;
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		Vector<Integer> v = new Vector<>();
    		v.add(3);
    		v.add(12);
    		v.add(51);
    	}
    
    }

    2. Enumeration<E> 객체를 생성한다. 이 때 Enumeration은 인터페이스 이므로 직접적으로 객체를 생성할 수 없다. 따라서 Enumeration 객체 타입으로 반환해주는 v.elements() 메소드를 사용해준다.

    Vetor<Integer> 와 같이 Enumeration<E> 도 <Integer> 로 지정한다.

    Enumeration<Integer> em = v.elements();

    3. hasMoreElemtets() 메소드와 nextElement() 메소드를 이용해서 데이터를 출력해보자

    // 현재 커서 이후에 요소들이 있는지 여부 체크, 있으면 true
    while(em.hasMoreElements()) { 
    			// 해당 데이터를 가져오고 커서가 다음 요소를 가리키게 한다.
    			int val = em.nextElement(); 
    			System.out.println(val);
    
    }
    3
    12
    51
    

     

    - 상세설명

    1) 처음 반복문에 들어갈 때 em.hasMoreElemtets() 가 현재 커서 이후에 요소들이 있는지 여부를 체크한다.

     맨 처음 커서는 첫 번째 요소 앞에 출발점에 있다. 

    2) 우리는 요소(데이터)를 3개 저장했으니 현재 커서(첫 번째 요소 앞) 이후에 요소가 있으므로 true가 되며 반복문에 들어간다. 

    3) em.nextElement() 메소드를 통해 해당 요소를 꺼내고 현재 커서를 다음 요소를 가르키게 한다.

    4) System.out.println(val)를 통해 첫 번째 요소를 출력한다.

    5) 반복문을 통해 hasMoreElements() 메소드에서 커서가 다음 요소를 가리킬게 없다면 false가 되어 반복문이 종료된다.

     

     

    2. Iteration

    Iteration<E>도 Enumeration<E>과 같은 역할을 하는 인터페이스다.

    Iteration과 함께 쓰이는 메소드

    boolean hasNext()

    Enmeration<E>의 hasMoreElements() 메소드와 같은 역할을 한다.

     

     

    E next()

    Enmeration<E>의 nextElement() 메소드와 같은 역할을 한다.

    ArrayList에서 Iterator 사용 방법

    1. String 유형을 담을 ArrayList 객체를 생성하고 데이터를 삽입한다.

    import java.util.*;
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		ArrayList<String> lst = new ArrayList<>();
    		lst.add("사과");
    		lst.add("바나나");
    		lst.add("키위");
    		
    	}
    
    }
    

    2. Iteration<E> 객체를 생성한다. Iteration은 인터페이스 이므로 직접적으로 객체를 생성할 수 없다. 따라서 Iteration객체 타입으로 반환해주는 v.iterator() 메소드를 사용해준다.

    ArrayList<String> 와 같이 Iterator<E> 도 <String> 으로 지정한다.

    Iterator<String> it = lst.iterator();

    3. hasNext() 메소드와 next() 메소드를 이용해서 데이터를 출력해보자

    for(;it.hasNext();) {
    	String str = it.next();
    	System.out.println(str);       
    }
    사과
    바나나
    키위
    

     

    - 상세설명

    1) 처음 반복문에 들어갈 때 it.hasNext() 가 현재 커서 이후에 요소들이 있는지 여부를 체크한다.

     맨 처음 커서는 첫 번째 요소 앞에 출발점에 있다. 

    2) 우리는 요소(데이터)를 3개 저장했으니 현재 커서(첫 번째 요소 앞) 이후에 요소가 있으므로 true가 되며 반복문에 들어간다. 

    3) it.next() 메소드를 통해 해당 요소를 꺼내고 현재 커서를 다음 요소를 가르키게 한다.

    4) System.out.println(str)를 통해 첫 번째 요소를 출력한다.

    5) 반복문을 통해 it.hasNext() 메소드에서 커서가 다음 요소를 가리킬게 없다면 false가 되어 반복문이 종료된다.

     

     

    댓글

Designed by Tistory.