Closed taxol1203 closed 3 years ago
타깃에 데코레이터기 위해 프록시를 적용하는 예제를 보면, Invocationhandler에 부가기능을 추가하여 다이내믹 프록시에서 위 핸들러에 메서드 처리를 요청 하는 방식으로 동작합니다.
Invocationhandler
예를들어, 예제에서는 UppercaseHandler를 통해 문자열을 대문자로 바꾸어 주는데, 다음과 같은 코드로 동작합니다.
UppercaseHandler
public class UppercaseHandler implements InvocationHandler { private Hello target; public UppercaseHandler(Hello target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object ret = method.invoke(target, args); if (ret instanceof String && method.getName().startsWith("say")) { return ((String) ret).toUpperCase(); } return ret; } }
만약 대문자로 만드는 기능 외에, 소문자로 만드는 기능을 하는 데코레이터 패턴도 만들고 싶다면, invoke 메서드 내에서 조건문을 통해 기능을 구현해야 할까요?
invoke
새로운 InvocationHandler 구현 클래스를 만드는 것으로 가능합니다. 데코레이터와 InvocationHandler 구현 클래스가 1:1 대응한다고 생각하시면 되겠습니다.
타깃에 데코레이터기 위해 프록시를 적용하는 예제를 보면,
Invocationhandler
에 부가기능을 추가하여 다이내믹 프록시에서 위 핸들러에 메서드 처리를 요청 하는 방식으로 동작합니다.예를들어, 예제에서는
UppercaseHandler
를 통해 문자열을 대문자로 바꾸어 주는데, 다음과 같은 코드로 동작합니다.만약 대문자로 만드는 기능 외에, 소문자로 만드는 기능을 하는 데코레이터 패턴도 만들고 싶다면,
invoke
메서드 내에서 조건문을 통해 기능을 구현해야 할까요?