목록Computer Science/Design Pattern (6)
Kim Jinung
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bn15ju/btsiNaYFZzO/M0bhqCHDRw1olhdj8Tsgt1/img.png)
Proxy 프록시 객체는 클라이언트-서버 아키텍처 중간에 껴서 대리자 역할을 한다. 굳이 왜 프록시를 추가하는 걸까? 서버는 언제나 바쁘다. 그런데 요청을 검증하고 캐싱까지 하려면 서버의 리소스가 많이 빡빡해진다. 그렇기에 서버와 클라이언트 사이에 대리자를 두고 일을 분담시킨다. 예를 들어서 클라이언트 요청에 대한 검증만을 전담하는 프록시를 만들면 그것이 API 게이트웨이다. 더 나아가서 만약 서비스 규모가 커져서 서버 인스턴스를 클러스터로 구축하면 프록시가 앞에서 로드 밸런싱을 해줄 수도 있다. 프록시를 추가함으로써 접근 제어와 부가 기능 등을 추가할 수 있는 것이다. Proxy pattern & Decorator pattern 둘다 프록시를 사용해서 구현한다. GOF 디자인 패턴 책에서는 의도에 따라..
Callback pattern Callback은 실행 가능한 코드 조각을 의미한다. 메서드에 콜백을 인자로 넘기면 콜백을 인자로 받는 메서드는 콜백을 원하는 시점에 실행할 수 있다. (주로 비동기 처리를 위한 목적으로 사용하는 개념이라고 한다.) Example public interface Callback { void call(); } public abstract class Task { final void executeWith(Callback callback) { execute(); Optional.ofNullable(callback).ifPresent(Callback::call); } public abstract void execute(); } @Slf4j public final class Simple..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/l8vez/btsiOH2Igol/ecYCPckCjFWMqJd22OQBhk/img.jpg)
Strategy pattern(Policy pattern) 전략 패턴은 인터페이스와 구현체를 사용해서 로직을 유연하게 변경하는 패턴이다. 구현 코드만 보면 DI랑 뭐가 다른거지 싶은데 목적이 다르다. 전략 패턴은 클라이언트가 전략을 사전에 숙지해서 주도권을 쥐고 런타임 시 전략(알고리즘)을 동적으로 변경한다면, DI는 의존성을 외부에서 주입해주는 방식을 통해서 객체간의 결합을 느슨하게 만드는 것이 목적이다. 템플릿 메서드 패턴이 상속을 이용한다면, 전략 패턴은 컴포지션을 이용하는 방식이다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bFMjAb/btsiOJ7anUh/UEyuuhzmtYxWicov9IWtmK/img.jpg)
Template method pattern 위 이미지에서 추상 클래스와 이를 상속하는 서브 클래스가 존재한다. AbstarctClass의 templateMethod 메서드 로직은 primitive1, 2 메서드를 실행하는 것이고, 두 메서드는 모두 추상 메서드다. 그리고 이를 상속하는 서브 클래스에서는 primitive1, 2메서드를 구현했다. 서브 클래스에서 templateMethod 메서드를 실행하면 서브 클래스에서 정의한 primitive1, 2 메서드가 templateMethod 메서드의 로직으로 동작한다. 즉 템플릿 메서드 패턴은 추상 클래스에서 공통 로직을 정의하고 서브 클래스에서 세부사항을 구현하는 패턴이다.
Inheritance, Composition 상속(Inheritacne)는 상위 타입과 하위 타입에 강한 결합도를 만든다. 하위 타입이 상위 타입 코드를 모두 알고 있어야하기 때문이다. 반면에 합성(Composition)은 객체 내부 필드에서 객체를 참조하게 만들고, 클래스의 인터페이스에 의존하게 만드는 방식으로 결합도를 낮춘다. 상속은 타입 계층을 반드시 만들어야 하는 경우에 사용한다. 해당 경우가 아니라면 대부분의 케이스에서 합성을 이용하는 것이 더 좋은 선택이다.
https://en.wikipedia.org/wiki/Front_controller Front controller - Wikipedia From Wikipedia, the free encyclopedia The front controller software design pattern is listed in several pattern catalogs and is related to the design of web applications. It is "a controller that handles all requests for a website,"[1] which is a useful st en.wikipedia.org Front controller 비지니스 요구사항에 따라서 다양한 컨트롤러를 필요로하게 ..