본문 바로가기

데코레이터 패턴 ==> 다이나믹프록시(자바) + 팩토리빈(스프링) 데코레이터 또는 프록시 패턴을 적용하는 데 어려움은.. 부가기능을 구현할 클래스가 부가기능과 관계없는 메소드들도 인터페이스에 선언된 메소드라면 전부 구현해야 하는 번거로움과 부가기능과 관계된 메소드들에 구현되는 코드 중복을 들 수 있다. 이 두 가지 어려움을 한 방에 해결하는 방법이 자바의 reflection에서 제공하는 다이나믹 프록시이다. Proxy.newProxyInstance(..)을 통해 프록시 오브젝트를 손쉽게 생성할 수 있다. 일일이 특정 인터페이스의 모든 메소드들을 구현하지 않아도 된다. Proxy.newProxyInstance(..)를 호출할 때 전달하는 InvocationHandler 인터페이스 구현체의 단일 메소드인 invoke() 메소드에 부가기능을 단 한번 만 구현함으로써 코드 중.. 더보기
스프링이 빈 오브젝트를 생성하는 방법 1. 일반 클래스가 빈의 클래스로 지정된 경우빈 오브젝트 => Class.forName("지정된 클래스 이름").newInstance();빈 타입 => 지정된 클래스 타입 2. FactoryBean 인터페이스를 구현한 클래스가 빈의 클래스로 지정된 경우빈 오브젝트 => FactoryBean오브젝트.getObject();빈 타입 => FactoryBean오브젝트.getObjectType(); 3. BeanPostProcessor(빈후처리기) 인터페이스를 구현한 클래스가 빈의 클래스로 지정된 경우빈 오브젝트 => 생성된 빈이 후처리 대상인 경우, Proxy.newProxyInstance(..)로 생성한 프록시 오브젝트로 대체한다.빈 타입 => 대체할 빈과 같은 인터페이스 타입 더보기
데코레이터 패턴과 프록시 패턴 데코레이터 패턴과 프록시 패턴은 둘 모두가 프록시 오브젝트를 사용한다. 프록시 오브젝트란? 타깃/실체와 같은 인터페이스를 구현한 클래스를 말한다. 전략패턴에서는 같은 인터페이스를 구현한 클래스들은 여러가지 구체적인 기술들을 각각 구현한 클래스들로서 클라이언트에게 여러 기술에 대해 선택의 폭을 확장해 주기 위해서 였다. 그러나 프록시 오브젝트는 전략패턴에서 처럼 또 다른 기술을 구현한 오브젝트가 아니고, 타킷/실체라는 하나의 기술을 사용하면서 그 실체에 부가기능을 더하거나 또는 그 실체로의 접근 방법을 제어하기 위해 구현된다. 결국, 프록시 오브젝트는 타깃/실체의 메소드를 사용한다. 이를 실체에게 위임한다 라고 말한다. 1. 프록시 오브젝트가 부가기능을 더한 것이라면, 데코레이터 패턴이라 부른다. 실례를 .. 더보기