IT

PHP의 Generators

아름다운전진 2023. 3. 1. 22:08
728x90

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 파일을 처리할 수 있습니다.

728x90