소개
IteratorAggregate 인터페이스는 추상 Traversable 인터페이스를 확장한 것으로, 클래스가 외부 이터레이터(external iterator)를 생성할 수 있도록 구현하는 인터페이스입니다. 이 인터페이스는 getIterator라는 이름의 추상 메서드 하나만을 정의하며, 이를 구현하는 클래스는 자신이 가진 데이터를 반복 가능(iterable)한 형태로 외부에 노출할 수 있습니다.
문법
IteratorAggregate extends Traversable {
/* 메서드 */
abstract public getIterator ( void ) : Traversable
}메서드
IteratorAggregate::getIterator — 외부 이터레이터를 반환
이 함수는 별도의 매개변수를 받지 않으며, Iterator 또는 Traversable 인터페이스를 구현하는 객체의 인스턴스를 반환합니다.
IteratorAggregate 예제
다음 PHP 스크립트에서는 IteratorAggregate 인터페이스를 구현하는 클래스가 배열을 프로퍼티(property)로 가지고 있습니다. getIterator() 메서드는 이 배열을 기반으로 ArrayIterator 객체를 생성하여 반환하며, 덕분에 foreach 루프를 통해 배열 요소를 아주 간편하게 순회할 수 있습니다.
예제 코드
<?php
class myIterator implements IteratorAggregate {
public $arr;
public function __construct() {
$this->arr = array(10,20,30,40);
}
public function getIterator() {
return new ArrayIterator($this->arr);
}
}
$obj = new myIterator();
foreach($obj as $key => $value) {
echo $key ." =>". $value . "\n";
}
?>실행 결과
배열 프로퍼티를 순회하면 다음과 같은 결과가 출력됩니다.
0=>10 1=>20 2=>30 3=>40
정리
IteratorAggregate는 Iterator 인터페이스의 모든 메서드를 일일이 구현하는 것보다 훨씬 간단하게 객체를 반복 가능한 상태로 만들 수 있는 방법입니다. 이미 존재하는 이터레이터(예: ArrayIterator)에게 실제 반복 작업을 위임하면 되므로 코드가 짧아지고 유지보수도 쉬워집니다. 내부 데이터가 배열 형태라면 대부분의 경우 IteratorAggregate와 ArrayIterator의 조합이 가장 깔끔하고 효율적인 선택입니다.