어떤 종류의 컨테이너로 이루어 졌는지, 예컨데 ArrayList 인지, LinkedList인지, HashSet 인지 알 필요가 없는 것이다. 공통된 인터페이스를 사용하여 컨테이너의 객체들을 선택할 수 있다. 추상화의 대표적인 모델이라고 할 수 있다.
아래는 Iterator의 기본 인터페이스 이다.
메서드
|
설명
|
next()
|
컨테이너의 다음 요소를 반환한다
|
hasNext()
|
꺼낼 요소가 있는지 확인한다
|
remove()
|
가장 최근에 반환된 요소를 삭제한다. 따라서 next() 메서드를 호출할 때마다 사용할 수 있다.
|
아래는 next()와 hasNext() 메서드를 사용한 Iterator의 기본 사용 예제이다.
public class IteratorTest { public static void display(Iterator<String> it) { System.out.print("["); while(it.hasNext()) { String s = it.next(); System.out.print(" " + s + " "); } System.out.println("]"); } public static void main(String[] args) { List<String> strings = Arrays.asList("A", "B", "C", "D", "E", "F"); // ArrayList LinkedList<String> stringsLL = new LinkedList<String>(strings); HashSet<String> stringHS = new HashSet<String>(strings); TreeSet<String> stringsTS = new TreeSet<String>(strings); display(strings.iterator()); display(stringsLL.iterator()); display(stringHS.iterator()); display(stringsTS.iterator()); } }
> 결과
[ A B C D E F ] [ A B C D E F ] [ D E F A B C ] [ A B C D E F ]
위의 예제처럼, display() 메서드는 인자로 전달되는 Iterator의 기반 컨테이너 타입을 모른다. 하지만 추상화된 인터페이스를 통해 아주 잘 동작하는것을 볼 수 있다. 이것이 Iterator의 소소하지만 강력함? 이라고 할 수 있을 것이다.
댓글 없음:
댓글 쓰기