리플렉션 and 메타 프로그래밍

리플렉션 전에 메타프로그래밍을 알아가면 좋다.

컴파일하며 데이터로 취급하는 스트링, 메소드 호출을 통해, 마치 이미 특정 코드가 작성된 것 처럼 만들어내는 것을 의미.

툴(인텔리제이 등)을 만들 때, 클래스 라이브러리 데이터를 보여줘야 한다. 리플렉션은 이런 때 사용한다.

보통 다이나믹 프록시를 직접 구현해 쓸 일이 잘 없다. 그래도 현재 장에서는 다이나믹 프록시를 예제로 들고 있다.

CGLIB

프록시 대상이 인터페이스가 있다면, JDK 다이나믹 프록시를 쓰면 된다. 그런데 CGLib는 JDK 표준이 아니다. 하지만 많이들 사용한다.

수많은 프레임워크가 얘를 사용한다. 왜냐면 인터페이스를 구현하지 않은 클래스에 대해서도 프록시를 만들 수 있기 때문이다.

상속을 이용해 프록시를 만드는 기법

인터페이스를 쓰고싶지 않은 사람들이 있을 수도 있고, 소스코드를 건들 수 없는 라이브러리에 프록시를 적용하고 싶을 땐 CGLIB를 사용해야 한다.

스프링에서는 둘다 쓰인다. 인보케이션 핸들러 등 다이나믹 프록시 검색시 CGLIB도 나온다.

6장에서는 CGLIB를 사용하지 않는다.

타깃의 인터페이스를 통해 구현하는 방법만 예제로 보여주고 있다.

일단 2권 전에는 JDK 다이나믹 프록시 중심으로 생각하는 편이 좋다.

Mock 테스트