개요
핵심 로직을 건들지 않고, 부가적인 작업을 수행할 때 주로 사용되는 패턴이다.
예를 들어 Event
가 생성될 때, 만들어진 시간을 콘솔에 기록하고 싶어졌다!
여기서 핵심 로직은 Event
를 생성하는 로직, 부가적인 로직은 만들어진 시간을 콘솔에 기록하는 코드다.
사용방법은 이렇다.
- 핵심로직을 수행하는 클래스와 부가적인 로직을 수행하는 클래스(프록시) 모두 같은 인터페이스를 참조하게끔한다.
- 클라이언트 코드에선 해당 인터페이스 타입을 사용하되, 실제 타입은 프록시 객체로 만든다.
- 프록시객체는 부가적인 로직을 수행한 뒤, 자신이 참조하고있는 핵심로직을 수행하는 객체를 사용한다.
구현
도메인 객체
public class Event {
private String name;
...constructor..getter..toString...
}
부가적인 로직을 수행하는 프록시와, 핵심 로직을 수행하는 서브젝트 모두가 구현하고 있는 인터페이스.
public interface EventService {
void createEvent(Event event);
}
부가적인 로직을 수행하는 프록시
public class EventServiceProxy implements EventService{
private EventService eventService;
public EventServiceProxy(EventService eventService) {
this.eventService = eventService;
}
@Override
public void createEvent(Event event) {
System.out.println("만들어진 시간 : " + LocalDateTime.now());
eventService.createEvent(event);
}
}
핵심 로직을 수행하는 서브젝트
public class EventServiceImpl implements EventService{
@Override
public void createEvent(Event event) {
System.out.println("이벤트가 만들어졌습니다 : " + event);
}
}
클라이언트
class EventServiceTest {
@Test
void proxy() {
EventService eventService = new EventServiceProxy(new EventServiceImpl());
eventService.createEvent(new Event("hmmmmmmmmteresting"));
}
}
콘솔에 기록되는 내용
만들어진 시간 : 2020-06-24T01:33:04.665159
이벤트가 만들어졌습니다 : Event{eventName='hmmmmmmmmteresting'}
레퍼런스
https://www.inflearn.com/course/the-java-code-manipulation/dashboard
'JAVA' 카테고리의 다른 글
1022 템플릿메서드 (0) | 2019.10.22 |
---|---|
[JUnit5] gradle에 junit5 끼얹기 (0) | 2019.08.11 |