Iterator, Enumeration, ListIterator는 컬렉션 프레임워크에 저장된 요소들을 access하는데 사용되어지는 interface입니다.
Enumeration은 Iterator의 이전 인터페이스라고 보시면 되고, ListIterator는 Iterator의 발전된 인터페이스라고 보시면 됩니다.
그럼 먼저 Iterator부터 알아보도록 하겠습니다.
* Iterator
- 컬렉션 프레임워크에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였습니다. 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, Collection인터페이스는 Iterator(Iterator를 구현한 클래스의 인스턴스)를 반환하는 iterator()를 정의하고 있습니다.
iterator()는 Collection인터페이스에 정의된 메서드이므로 Collection인터페이스의 자손인 List와 Set에도 포함되어 있습니다. 그래서 List나 Set인터페이스를 구현하는 컬렉션은 iterator()가 각 컬렉션의 특징에 알맞게 작성되어 있습니다. 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문을 사용해서 컬렉션클래스의 요소들을 읽어 올 수 있습니다.
Iterator를 이용해서 컬렉션의 요소를 읽어오는 방법을 표준화했기 때문에 이처럼 코드의 재사용성을 높이는 것이 가능한 것입니다.
이처럼 공통 인터페이스를 정의해서 표준을 정의하고 구현하여 표준을 따르도록 함으로써 코드의 일관성을 유지하여 재사용성을 극대화하는 것이 객체지향 프로그래밍의 중요한 목적 중의 하나입니다.
Map인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 쌍으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없고, 그 대신 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있습니다.
아래 예제 코드를 보도록 하겠습니다.
List클래스들은 저장순서를 유지하기 때문에 Iterator를 이용해서 읽어 온 결과 역시 저장 순서와 동일하지만 Set클래스들은 각 요소간의 순서가 유지 되지 않기 때문에 Iterator를 이용해서 저장된 요소들을 읽어 와도 처음에 저장된 순서와 같지 않습니다.
* Enumeration
Enumeration은 컬렉션 프레임웍이 만들어지기 이전에 사용된 것으로 Iterator의 구버젼이라고 생각하면 됩니다. 그래서 웬만하면 Enumeration보다 Iterator를 사용하시는게 나을듯합니다.
* ListIterator
ListIterator는 Iterator를 상속받아서 기능을 추가한 것으로, 컬렉션의 요소에 접근할 때 Iterator는 단방향으로만 이동할 수 있는 데 반해 ListIterator는 양방향으로의 이동이 가능합니다. 다만 ArrayList나 LinkedList와 같이 List인터페이스를 구현한 컬렉션에서만 사용할 수 있습니다.
아래는 ListIterator의 예제입니다.
이 포스트가 도움이 되셨다면 공감버튼을 눌러주시기 바랍니다. ^^
Comparator, Comparable (0) | 2019.04.21 |
---|---|
Hashset, LinkedHashSet, TreeSet (0) | 2019.04.21 |
자바 collection framework( stack, queue ) (0) | 2019.04.20 |
자바 collection framwork ( LinkedList ) (0) | 2019.04.16 |
깊은복사, 얕은복사 (0) | 2019.04.14 |
댓글 영역