Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP IteratorAggregate 인터페이스 – 외부 이터레이터 구현 방법 총정리

소개

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의 조합이 가장 깔끔하고 효율적인 선택입니다.