본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP 이터레이터 패턴 — 컬렉션을 foreach로 순회 완전 정리

by 왕진 2026. 6. 18.
반응형

 

 

Web Development · PHP Iterator Pattern

이터레이터 패턴 —
Member 5명 + Members 컬렉션 + foreach 순회

memberclass + membersclass를 require_once로 결합
시작 오늘 분석할 코드
require_once 'memberclass.php'; require_once 'membersclass.php'; // 회원 5명 객체 생성 $member1 = new Member(1, "성1", "이름1", "e1@...", "p1"); $member2 = new Member(2, "성2", "이름2", "e2@...", "p2"); // ... 5명까지 $members = new Members; $members->add($member1); $members->add($member2); // ... 5번 add $iterator = $members->getIterator(); foreach($iterator as $member){ print $member->getId()." "; print $member->getLastname()." "; // ... 5개 필드 출력 }
1 성1 이름1 e1@example.com password1 2 성2 이름2 e2@example.com password2 3 성3 이름3 e3@example.com password3 4 성4 이름4 e4@example.com password4 5 성5 이름5 e5@example.com password5

1 디자인 패턴 — 이터레이터

이터레이터 패턴"내부 구조를 노출하지 않고 컬렉션을 순회"하게 해주는 디자인 패턴이다.

사용자는 foreach($iterator as $m)만 알면 된다. 내부가 배열인지, 트리인지, DB 결과인지 알 필요 없음.

2 require_once로 클래스 결합

각 클래스를 별도 파일에 둔 후 사용 측에서 가져온다. 코드 분리 + 재사용성↑.

require_once 'memberclass.php'; // Member 클래스 정의 로드 require_once 'membersclass.php'; // Members 클래스 정의 로드 // 이제 두 클래스를 사용 가능

3 단축 — foreach 직접

사실 IteratorAggregate를 구현했으므로 getIterator()를 명시적으로 부를 필요 없다.

// 길게 $iterator = $members->getIterator(); foreach ($iterator as $m) { ... } // 짧게 (PHP가 자동 처리) foreach ($members as $m) { ... }

 

반응형

 

4 실무에서 유용한 응용
· DB 결과를 객체 컬렉션으로 감싸서 처리
· API 페이지네이션 — 자동으로 다음 페이지 로드
· 큰 파일을 한 줄씩 읽기 (메모리 절약)
· Generator로 대체 가능 (yield 키워드)

핵심 한 줄 요약

이터레이터 패턴컬렉션 순회의 표준화
require_once클래스 정의 파일 로드 (중복 방지)
add()컬렉션에 객체 추가
getIterator()순회용 Iterator 반환
foreach자동으로 getIterator 호출 가능
ArrayIterator배열을 Iterator로 감싸는 PHP 클래스
현대 PHPGenerator·yield로 더 간결히
반응형

댓글