리플렉션 전에 메타프로그래밍을 알아가면 좋다.
컴파일하며 데이터로 취급하는 스트링, 메소드 호출을 통해, 마치 이미 특정 코드가 작성된 것 처럼 만들어내는 것을 의미.
툴(인텔리제이 등)을 만들 때, 클래스 라이브러리 데이터를 보여줘야 한다. 리플렉션은 이런 때 사용한다.
보통 다이나믹 프록시를 직접 구현해 쓸 일이 잘 없다. 그래도 현재 장에서는 다이나믹 프록시를 예제로 들고 있다.
프록시 대상이 인터페이스가 있다면, JDK 다이나믹 프록시를 쓰면 된다. 그런데 CGLib
는 JDK 표준이 아니다. 하지만 많이들 사용한다.
수많은 프레임워크가 얘를 사용한다. 왜냐면 인터페이스를 구현하지 않은 클래스에 대해서도 프록시를 만들 수 있기 때문이다.
상속을 이용해 프록시를 만드는 기법
인터페이스를 쓰고싶지 않은 사람들이 있을 수도 있고, 소스코드를 건들 수 없는 라이브러리에 프록시를 적용하고 싶을 땐 CGLIB를 사용해야 한다.
스프링에서는 둘다 쓰인다. 인보케이션 핸들러 등 다이나믹 프록시 검색시 CGLIB도 나온다.
6장에서는 CGLIB를 사용하지 않는다.
타깃의 인터페이스를 통해 구현하는 방법만 예제로 보여주고 있다.
일단 2권 전에는 JDK 다이나믹 프록시 중심으로 생각하는 편이 좋다.