목록전체 글 (75)
Kim Jinung

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..

Strategy pattern(Policy pattern) 전략 패턴은 인터페이스와 구현체를 사용해서 로직을 유연하게 변경하는 패턴이다. 구현 코드만 보면 DI랑 뭐가 다른거지 싶은데 목적이 다르다. 전략 패턴은 클라이언트가 전략을 사전에 숙지해서 주도권을 쥐고 런타임 시 전략(알고리즘)을 동적으로 변경한다면, DI는 의존성을 외부에서 주입해주는 방식을 통해서 객체간의 결합을 느슨하게 만드는 것이 목적이다. 템플릿 메서드 패턴이 상속을 이용한다면, 전략 패턴은 컴포지션을 이용하는 방식이다.