동적 프록시는 인터페이스만 넘겨도 실행 중에 자동으로 구현체를 만들어주는 기능
여기서 Mapper.class는 인터페이스 → 직접 구현 안 함
Mapper mapper = session.getMapper(Mapper.class);
- 그런데 getMapper()를 호출하면?
- MyBatis가 내부에서 동적 프록시 객체를 생성
- mapper.selectNow() 같은 메서드가 호출되면
→ 실제로는 MyBatis가 mapper.xml 또는 @Select 애노테이션에 매핑된 SQL을 실행
→ 결과를 리턴
- 인터페이스만 던져주면 MyBatis가 알아서 “구현체”를 런타임에 만들어 줘서 동작
정리
- 프록시: 원래 객체 대신 요청을 처리하는 대리인 객체
- 동적 프록시: 실행 중에(JVM이) 자동으로 만들어주는 프록시 객체
- MyBatis: Mapper 인터페이스만 주면, 동적 프록시가 “구현체” 역할을 해서 SQL을 실행