PHP의 Generators
PHP에서 제너레이터는 대용량의 데이터 집합을 반복할 때 메모리에 전체 데이터를 한 번에 로드하지 않고 간단하고 효율적으로 반복자를 작성할 수 있도록 해줍니다. PHP의 제너레이터는 `yield` 키워드를 사용하여 함수의 실행을 일시 중지하고 호출 코드에 값을 반환하는 방식으로 작동합니다. 제너레이터가 재개되면 일시 중지된 지점에서 실행을 이어갑니다.
아래는 PHP의 제너레이터 함수의 간단한 예입니다:
function generatorExample() {
for ($i = 0; $i < 5; $i++) {
yield $i;
}
}
이 제너레이터를 사용하려면 일반 함수처럼 호출할 수 있지만, 값을 반환하는 대신 제너레이터 객체를 반환합니다:
$generator = generatorExample();
이제 제너레이터 객체를 사용하여 제너레이터가 생성하는 값을 반복할 수 있습니다:
foreach ($generator as $value) {
echo $value
그러면 다음이 출력됩니다.
0
1
2
3
4
제너레이터는 큰 파일을 읽는 것과 같이 큰 데이터 세트로 작업할 때 특히 유용합니다. 다음은 CSV 파일을 읽고 한 번에 한 행씩 생성하는 제너레이터의 예입니다.
function csvGenerator($filePath) {
if (($handle = fopen($filePath, "r")) !== false) {
while (($row = fgetcsv($handle)) !== false) {
yield $row;
}
fclose($handle);
}
}
$generator = csvGenerator("data.csv");
foreach ($generator as $row) {
print_r($row);
}
이 예에서 제너레이터는 CSV 파일을 한 번에 한 행씩 읽고 각 행을 배열로 생성합니다. 이를 통해 전체 파일을 메모리에 로드하지 않고도 대용량 CSV 파일을 처리할 수 있습니다.