본문 바로가기

디자인 패턴13

프록시 패턴 기존 클라이언트가 서버에게 요청하는 클라이언트 서버 구조에서는 일반적으로 클라이언트가 서버를 직접 호출하고 처리 결과를 직접 받는다. 그런데 클라이언트가 요청한 결과를 서버에 직접 요청하는 것이 아닌 대리자를 통해 대신 간접적으로 서버에 요청할 수 있다. 여기서 대리자를 영어로 Proxy라고 한다. 이러한 대리자를 통해 호출하는 방식에는 다양한 이점이 존재한다. 권한에 따른 접근제어 캐싱 부가기능 추가 프락시 체인 지연 로딩 객체의 관점에서 프락시를 생각해보면 요청하는 객체는 클라이언트, 응답하는 객체는 서버라는 관점에서 어떠한 객체가 프락시가 될 수 있을까? 객체가 프락시가 되기 위해선, 클라이언트가 요청을 한 대상이 프록시인지, 실제 서버인지 몰라야한다. 즉 서버와 프록시는 같은 인터페이스를 사용해야.. 2022. 1. 20.
전략 패턴 전략 패턴과 템플릿 메서드 패턴은 유사하지만 다른 의도를 가지고 있다. 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식 클래스에서 상속을 사용해 해결하였지만, 전략 패턴은 변하지 않는 코드 영역을 Context에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 하여 문제를 해결한다. 즉 템플릿 메서드 패턴의 템플릿 역할을 Context가 하고, Strategy는 자식을 클래스에서 상속을 이용해 처리하는 부분을 인터페이스로 변경하였다. 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다 [GOF 전략 패턴] Strategy .. 2022. 1. 17.
템플릿 메서드 패턴 GOF 디자인 패턴에서 템플릿 메서드 패턴은 다음의 목적을 가지고 있다고 정의한다. "작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다." [GOF] 부모 클래스에 변하지 않는 하나의 큰 템플릿을 지정하고 일부 변경되는 코드 조각을 자식 클래스에서 정의하여 자식 클래스의 오버 라이딩된 메서드를 통해 큰 템플릿의 전체 구조를 변경하지 않고도 특정 부분만을 변경하여 실행할 수 있다. 이는 자바의 상속과 오버라이딩을 통해서 다형성으로 문제를 해결하는 방법이다. 대걔 핵심인 비즈니스 로직을 처리하다 보면 해당 비즈니스 로직을 도와주는 부가적인 기능이 같이 개발되는 경우가.. 2022. 1. 15.