PHP PHP에서 리플렉션(Reflection)의 고급 활용법
페이지 정보

					영삼이
					
				
    	본문
✅ PHP에서 리플렉션(Reflection)의 고급 활용법
**리플렉션(Reflection)**은 PHP에서 클래스, 메서드, 속성 등의 메타데이터를 런타임에 조회하고 조작할 수 있는 기능입니다. 이 기능은 프레임워크 개발, DI 컨테이너, ORM, 테스트 자동화 등에서 핵심적으로 활용됩니다.
🔍 기본 사용법
클래스 분석
[code=php]
class User {
    public string $name;
    private int $age;
    public function sayHello(): string {
        return "Hello";
    }
}
$ref = new ReflectionClass(User::class);
echo $ref->getName(); // User
print_r($ref->getProperties());
print_r($ref->getMethods());
[/code]
- 
클래스 이름, 속성, 메서드 등 정보 조회 가능
 
🔧 동적 인스턴스 생성
[code=php]
$ref = new ReflectionClass(User::class);
$instance = $ref->newInstance(); // 생성자 없는 경우
// 생성자 인자가 있는 경우
$instance = $ref->newInstanceArgs(['홍길동']);
[/code]
🧩 비공개(private) 속성 접근
[code=php]
$ref = new ReflectionClass(User::class);
$prop = $ref->getProperty('age');
$prop->setAccessible(true);
$user = new User();
$prop->setValue($user, 30);
echo $prop->getValue($user); // 30
[/code]
- 
테스트, 직렬화 등에서 유용
 - 
반드시
setAccessible(true)필요 
🧠 메서드 호출
[code=php]
$ref = new ReflectionClass(User::class);
$method = $ref->getMethod('sayHello');
$instance = $ref->newInstance();
echo $method->invoke($instance); // Hello
[/code]
🧪 DI 컨테이너 자동 주입 예시
[code=php]
class PostService {
    public function __construct(UserService $userService) {}
}
function autoResolve(string $className): object {
    $ref = new ReflectionClass($className);
    $constructor = $ref->getConstructor();
    if (!$constructor) return new $className();
    $deps = [];
    foreach ($constructor->getParameters() as $param) {
        $deps[] = autoResolve($param->getType()->getName());
    }
    return $ref->newInstanceArgs($deps);
}
$instance = autoResolve(PostService::class);
[/code]
- 
생성자 의존성 자동 분석 및 주입
 - 
Laravel, Symfony 등에서 사용되는 방식과 유사
 
✅ 실무 활용 사례
| 분야 | 활용 방식 | 
|---|---|
| DI 컨테이너 | 의존성 자동 주입 | 
| 테스트 프레임워크 | 메서드 자동 실행, Mock 주입 | 
| ORM | Entity 메타데이터 조회 | 
| 커맨드 버스 | 핸들러 자동 매칭 | 
⚠️ 주의사항
- 
성능 비용 있음 → 반복 호출 피하기
 - 
setAccessible(true)는 보안에 신중하게 사용 - 
리플렉션 남용은 코드 가독성을 해칠 수 있음
 
🧠 요약
- 
Reflection은 PHP의 런타임 메타프로그래밍 도구
 - 
클래스, 메서드, 속성 조작이 가능하며 프레임워크 제작에 필수
 - 
적절히 사용하면 코드 유연성과 자동화를 극대화할 수 있음
 
- 이전글PHP에서 JWT 토큰 직접 구현하기 (라이브러리 없이) 25.03.28
 - 다음글PHP에서 커스텀 예외 처리 체계 설계하기 25.03.28
 
				
댓글목록
등록된 댓글이 없습니다.