다음 Iterator 클래스의 구현에서 메서드의 역할은?

과목: PHP

문제 번호: 3042

hard
다음 Iterator 클래스의 구현에서 valid() 메서드의 역할은?
<?php
class NumberIterator implements Iterator {
    private $numbers = [10, 20, 30];
    private $position = 0;
    
    public function current() {
        return $this->numbers[$this->position];
    }
    
    public function key() {
        return $this->position;
    }
    
    public function next() {
        $this->position++;
    }
    
    public function rewind() {
        $this->position = 0;
    }
    
    public function valid() {
        return $this->position < count($this->numbers);
    }
}

$iterator = new NumberIterator();
foreach($iterator as $key => $value) {
    echo "$key: $value ";
}
?>
A. 현재 요소의 값이 유효한지 검사한다
B. 포인터가 배열 범위 내의 유효한 위치를 가리키는지 확인한다
C. 배열에 null 값이 있는지 확인한다
D. 포인터를 다음 위치로 이동할 수 있는지 확인한다

정답: B



valid() 메서드는 현재 포인터가 배열의 유효한 범위 내에 있는지 확인하여 foreach 루프의 종료 시점을 결정합니다.

valid() 메서드의 작동 원리:

1. 반복 시작: foreach 시작 시 rewind() 호출로 $position = 0

2. 반복 조건 검사: 각 루프마다 valid() 호출
$position < count($this->numbers) 조건 확인
0 < 3true (첫 번째 반복 실행)
1 < 3true (두 번째 반복 실행)
2 < 3true (세 번째 반복 실행)
3 < 3false (루프 종료)

3. 루프 제어: valid()false를 반환하면 foreach 루프 종료

실행 결과: "0: 10 1: 20 2: 30 "

핵심 개념:

valid()는 "더 반복할 요소가 있는가?"를 판단하는 메서드

⦁ 포인터가 배열 경계를 벗어나면 false 반환하여 무한 루프 방지

foreach가 언제 멈춰야 할지 알려주는 중요한 역할

💡 학습 팁

이 문제를 포함한 PHP 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.