본문 바로가기

Developer/Java-oop

#024. Interface Iterator<E> 알아보기...

#024. Interface Iterator<E> 알아보기...

 

1. Iterator Interface 는 앞에서 배운 HashSet, ArrayList 등.. 의 collection 들의 데이터를 하나씩 꺼내거나, 데이터가 더이상 존재하는지 확인 하거나, 데이터를 삭제할 수 있는 기능을 구현하도록 되어 지시가 되어 있을 것이다. ( hasNext(), next(), remove() )

 

2. 먼저 Java API 로 Interface Iterator 에 대해서 확인해보자.

API 주소 : http://download.oracle.com/javase/6/docs/api/ (자주 사용하니, 즐겨찾기 추가를 하자!)

설명

첫번째 이미지에서 왼쪽부터 위아래로 순서대로 누른다. HashSet 에는 iteratoer<E> 로 반환하는 iterator() 메서드를 지원을 해준다.

Iterator<E> 를 클릭하고, 아래쪽으로 내려와 보면 위 두번째 그림처럼 보이게 될 것이다.

hasNext(): 메서드의 반환형은 boolean 이다. 즉,데이터가 있으면 true 없으면 false 를 반환한다.

Next(): 메서드의 반환형은 E 이다. 즉, 데이터를 E 타입으로 반환한다.

remove(): 메서드의 반환형은 void 없다. item을 삭제한다.

 

2. 이전에 사용했던, SetDemo class / ListDemo class 를 활용해서 테스트 해보겠다.

1) SetDemo class : HashSet 에 iterator 사용해보기...

코드

package util;

import java.util.HashSet;

import java.util.Iterator;

public class SetDemo {

    public static void main(String[] args) {

        HashSet<String> names = new HashSet<String>();

        names.add("김동혁"); names.add("이연희"); names.add("김준호");

        System.out.println("김동혁 포함여부..: " + names.contains("김동혁") );

        System.out.println("names 가 비었는지 확인: " + names.isEmpty() );

        names.add("김동혁");    //데이터 중복 추가

        names.remove("김준호"); //삭제

        //데이터 추출

        for(String name : names){

            System.out.println(name);

        }

        Iterator<String> iter = names.iterator();

        while(iter.hasNext()){

            String name = iter.next();

            System.out.println("iter: " + name);

        }

        System.out.println("원소의 갯수: " + names.size());

        names.clear(); //모두삭제

    }

}

결과

김동혁 포함여부..: true

names 가 비었는지 확인: false

이연희

김동혁

iter: 이연희

iter: 김동혁

원소의 갯수: 2

설명

이전 소스에서 박스 그려진 두 곳만 변경이 되었다.

문장16: names.iterator() 로 부터 Iterator 형을 iter 객체를 생성한다.

문장17: hasNext() 데이터가 있는지 확인하고 있다면, true 를 발생한다.

문장18: iter.Next() 메서드를 사용해서 String name 에 값을 전달 받는다.

문장19: 전달받은 name 변수의 값을 출력 해본다.

문장20: iter.remove() 를 넣어보면, names 의 값이 사라지는 것을 볼 수 있다. 이것은 iterator 가 참조 값으로 처리한다는 것을 유추해 볼 수 있다.

 

2) ListDemo class : ListArry 에 iterator 사용해보기...

코드

package util;

import java.util.ArrayList;

import java.util.Iterator;

public class ListDemo {

    public static void main(String[] args) {

        ArrayList<String> names = new ArrayList<String>();

        names.add("김동혁"); names.add("이연희"); names.add("김준호");

        System.out.println("김동혁 포함여부..: " + names.contains("김동혁") );

        System.out.println("names 가 비었는지 확인: " + names.isEmpty() );

        names.add("김동혁");    //데이터 중복 추가

        names.remove("김준호"); //삭제

        //데이터 추출

        for(String name : names){ System.out.println(name); }

        //데이터 추출

        for ( int i=0; i<names.size(); i++ ){ System.out.println("[ " + i + " ]번째: " + names.get(i)); }

        Iterator<String> iter = names.iterator();

        while(iter.hasNext()){

            String name = iter.next();

            System.out.println("iter: " + name);

        }

        System.out.println("원소의 갯수: " + names.size());

        names.clear(); //모두삭제

    }

}

결과

김동혁 포함여부..: true

names 가 비었는지 확인: false

김동혁

이연희

김동혁

[ 0 ]번째: 김동혁

[ 1 ]번째: 이연희

[ 2 ]번째: 김동혁

iter: 김동혁

iter: 이연희

iter: 김동혁

원소의 갯수: 3

설명

본문 2-1) HashSet 의 사용법과 100% 동일하다. 따로 설명할 내용이 없다. ^^

 

2-1) 예제 설명의 iter.remove() 도 사용해보고 어떻게 변경 되는지 확인해보자.

다음시간엔 Exception (예외처리) 에 대해서 알아보자...

 

잡담. 고생하셨습니다. ^^" 이제 거의 oop가 끝이 보이는 군요 *^^*