Iterator 패턴은 객체 지향 디자인 패턴 중 하나로, 컬렉션 객체의 요소에 접근하기 위한 일관된 인터페이스를 제공하는 패턴입니다.
Iterator 패턴을 사용하면, 컬렉션 객체의 내부 구조를 외부로 노출하지 않고도 요소에 접근할 수 있습니다. 이는 객체의 캡슐화를 유지하는 데 도움이 되며, 컬렉션 객체와 사용자 간의 결합도를 낮춰줍니다.
Iterator 패턴은 주로 다음과 같은 상황에서 사용됩니다. - 컬렉션 객체의 내부 구조를 숨기고, 요소에 일관된 방식으로 접근하고 싶을 때 - 여러 종류의 컬렉션 객체를 일관된 방식으로 접근하고 싶을 때 - 컬렉션 객체를 순회하면서 요소를 제거하는 등의 작업을 수행할 때
Iterator 패턴은 일반적으로 Iterator, ConcreteIterator, Aggregate, ConcreteAggregate 등의 클래스로 구성됩니다. Iterator 클래스는 요소에 접근하기 위한 인터페이스를 정의하고, ConcreteIterator 클래스는 실제로 요소에 접근하는 역할을 합니다. Aggregate 클래스는 컬렉션 객체의 인터페이스를 정의하고, ConcreteAggregate 클래스는 실제로 컬렉션 객체를 구현합니다.
아래 코드를 통해 구현 예제를 보겠습니다.
먼저 User 클래스입니다. 생성자로 name, age, loginId를 받고, 그것을 보내주는 get함수로 이루어져 있습니다.
packagegof.iterator;
publicclassUser {
privateStringname;
privateintage;
privateStringloginId;
publicUser(Stringname, intage, StringloginId) {
this.name = name;
this.age = age;
this.loginId = loginId;
}
publicStringgetName() {
returnname;
}
publicintgetAge() {
returnage;
}
publicStringgetLoginId() {
returnloginId;
}
}
Aggregate 인터페이스 입니다.
packagegof.iterator;
interfaceAggregate {
Iteratoriterator();
}
Iterator 인터페이스입니다. hasNext와, next가 추상메서드로 정의되어 있습니다.