들어가기 전 간단하게

[0615] 한맥 스터디 | Notion

스프링의 JDK Dynamic Proxy

<aside> 💡

JDK Dynamic Proxy는 Java의 표준 라이브러리를 사용해 인터페이스 기반의 프록시 객체를 생성하는 방법

</aside>

런타임에 프록시 클래스가 동적으로 생성됨.

특징

항목 설명
동작 시점 런타임 (실행 중 동적으로 생성됨)
대상 반드시 인터페이스를 구현한 객체여야 함

image.png

JDK 동적 프록시는 인터페이스 기반으로 프록시 객체를 생성함

⇒ Target 객체의 구현체 클래스에 대해 알지 못함

따라서, 위와 같은 경우 JDK Proxy는 MemberServiceImpl을 알지 못함

image.png

JDK Proxy를 구현체로 캐스팅할 경우에는 예외가 발생함

⇒ 구현체 클래스로 의존관계 주입이 될 수 없다는 단점

물론 DI는 주로 인터페이스 기반으로 주입받기 때문에, 실제 구체 클래스를 선언하는 경우가 없어서 문제가 없을 가능성이 있음.

⇒ 그러나 테스트, 또는 AOP가 적용된 프록시가 구체 클래스를 직접 의존 관계를 받아야하는 경우가 있을 수 있음