JAVA

[JAVA] 프록시 패턴에 대해 알아보자

gracelove91 2020. 6. 24. 01:35

개요

핵심 로직을 건들지 않고, 부가적인 작업을 수행할 때 주로 사용되는 패턴이다.
예를 들어 Event가 생성될 때, 만들어진 시간을 콘솔에 기록하고 싶어졌다!
여기서 핵심 로직은 Event 를 생성하는 로직, 부가적인 로직은 만들어진 시간을 콘솔에 기록하는 코드다.

사용방법은 이렇다.

  1. 핵심로직을 수행하는 클래스와 부가적인 로직을 수행하는 클래스(프록시) 모두 같은 인터페이스를 참조하게끔한다.
  2. 클라이언트 코드에선 해당 인터페이스 타입을 사용하되, 실제 타입은 프록시 객체로 만든다.
  3. 프록시객체는 부가적인 로직을 수행한 뒤, 자신이 참조하고있는 핵심로직을 수행하는 객체를 사용한다.

구현

도메인 객체

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