-
[Spring] 동적 프록시 기술 - 리플렉션Spring 2022. 6. 16. 21:52
이전 프록시 패턴과 데코레이터 페턴을 통해 공부했듯이
프록시를 활용한다면 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있었다.
하지만 프록시를 적용하기 위해 해당 기능을 적용할 클래스의 개수만큼 프록시 클래스를 생성해야하고
생성된 프록시 클래스가 같은 기능을 가지고 있다면 그 모습이 같았다.
따라서 같은 기능을 실행하는 프록시 클래스 클래스의 경우 동적으로 대상이 결정된다면
위의 문제들을 해결할 수 있을 것 같다.
그리고 이러한 동적 프록시 기술은 JDK 동적 프록시 기술이나 CGLIB와 같은 프록시 생성 기술을 통해
만들어 낼 수 있다.
자바 리플렉션 이란?
log.info("반복되는 코드1"); /* 반복되지 않는 코드 */ log.info("반복되는 코드2");
만약 위처럼 각 메서드, 클래스에서 반복되는 코드 사이에
반복되지 않는 코드가 껴있다면 해당 부분만 동적으로 변경하여 중복 코드를 제거할 수 있다.
이때 리플렉션을 이용하면 클래스나 메서드의 메타정보를 활용하여 동적으로 코드를 변경할 수 있다.
(람다 등을 활용해서 공통화 하는 것은 물론 가능하긴 하다. - 람다 실행 어라운드 패턴 참고)
// 1. 클래스 정보를 가져온다. Class clazz = Class.forName("패키지.클래스"); // 2. 메서드 정보를 가져온다. Method method = clazz.getMethod("메서드 이름"); // 3. 메서드를 실행할 때에는 invoke 메서드를 호출한다. ClassSample sample = new ClassSample(); //해당 객체의 메서드 이름에 해당하는 메서드를 실행함 Object result = method.invoke(sample);
정적인 코드를 리플렉션을 활용하면 클래스, 메서드의 메타정보를 통해 추상화하고
공통 로직을 만들어 낼 수 있다.
하지만 리플렉션은 런타임에 동작하기 때문에 컴파일 시점에는 오류를 잡을 수 없다.
[참고 : 인프런 - 스프링 핵심 원리 - 고급편]
'Spring' 카테고리의 다른 글
[Spring] 동적 프록시 기술 - CGLIB (0) 2022.06.16 [Spring] 동적 프록시 기술 - JDK 동적 프록시 (0) 2022.06.16 [Spring] 프록시 패턴과 데코레이터 패턴 - 3 (0) 2022.06.16 [Spring] 프록시 패턴과 데코레이터 패턴 - 2 (0) 2022.06.16 [Spring] 프록시 패턴과 데코레이터 패턴 - 1 (0) 2022.06.16