목록BE (354)
오봉이와 함께하는 개발 블로그
스프링 고급편 - 프록시 패턴과 데코레이터 패턴 정리GOF 데코레이터 패턴이전 코드들을 보면 Decorator에 중복이 있다.꾸며주는 역할을 하는 Decorator들은 스스로 존재할 수 없다.(MessageDecorator, TimeDecorator) 따라서 내부에 호출 대상인 Component를 항상 가지고 있어야 하며, 호출해주어야 한다.이런 부분이 중복인데, 이런 중복을 제거하기 위해 Component를 속성으로 가지는 Decorator라는 추상 클래스를 만드는 방법도 고민의 여지가 있다.추상 클래스를 추가하면 클래스 다이어그램을 통해 어떤 깃이 실제 컴포넌트로 사용되는지, 데코레이터인지도 구분할 수 있게 된다.위 그램에서 Decorator라는 클래스가 Component를 속성으로 가지고 있다.프록..
스프링 고급편 - Decorator데코레이터 패턴 이해를 위한 예제 코드를 작성하기 전 클래스 의존 관계를 보자클래스 의존 관계Client -> Component 런타임 의존 관계Client -> RealComponentpublic interface Component { String operation();}@Slf4jpublic class RealComponent implements Component { @Override public String operation() { log.info("run RealComponent"); return "data"; }}@Slf4j@RequiredArgsConstructorpublic class DecoratorPatternClient { priva..
스프링 고급편 - ProxyProxy를 통하면 Client와 Server 사이에 대리자를 통해 간접적으로 서버에 요청할 수 있게 해준다직접 호출Client -> Server간접 호출 (Proxy)Client -> Proxy -> ServerProxy를 통해 간접 호출 하면 중간에서 여러가지 일을 할 수 있다.특정 요청을 했을 때 이미 Proxy에 있을 경우 Client의 요청이 Server까지 도달하지 않고, Proxy를 통해 요청에 대한 응답 가능 (접근 제어, 캐싱)특정 요청을 했을 때 Proxy를 통해 Server의 기능 뿐 아니라, 부가 기능 수행 가능 (부가 기능 추가)Proxy가 또 다른 Proxy를 호출할 수 있다.Client는 Proxy를 통해 요청했기 때문에 뒤에 어떤 과정이 있는지 알 ..
템플릿 콜백 패턴 - 적용TraceCallback 인터페이스public interface TraceCallback { T call();}TraceTemplate.javapublic class TraceTemplate { private final LogTrace trace; public TraceTemplate(LogTrace trace) { this.trace = trace; } public T execute(String message, TraceCallback callback) { TraceStatus status = null; try { status = trace.begin(message); T result = callback.call(); tra..
템플릿 콜백 패턴 - 시작ContextV2는 변하지 않는 템플릿 역할을 하고, 변하는 부분은 파라미터로 넘어온 Strategy의 구현체이다.이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback)이라 한다.예시를 보면context.execute(new StrategyLogic1());context.execute(new Strategy() { @Override public void call() { log.info("비즈니스 로직1 실행"); } });context.execute(() -> log.info("비즈니스 로직1 실행"));위 코드에서 execute()의 인자로 넘겨주는 것을 콜백이라 한다.콜백 정의프로그래밍..