디자인 패턴 (Design Pattern) 7

[구조 패턴] 프록시 패턴(Proxy pattern)

의도 프록시 패턴은 다른 객체에 대한 대체 또는 자리 표시자를 제공할 수 있는 구조 디자인 패턴이다. 프록시 패턴은 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 원래 객체에 대한 접근을 제어하므로 당신의 요청이 원래 객체에 전달되기 전 / 후에 무언가를 수행할 수 있도록 한다. 문제 상황 객체에 대한 접근을 제한하는 이유는 무엇일까? 방대한 양의 시스템 자원을 소비하는 거대한 자원이 있다고 가정하자. 이 객체는 필요할 때가 있기는 하지만 항상 필요한 것은 아니다. 필요할 때만 객체를 만들어서 초기화를 구현 가능하다. 그러면 객체의 모든 클라이언트들은 어떤 지연된 초기화 코드를 실행해야하는데 이는 많은 코드 중복을 초래한다. 이 코드를 객체의 클래스..

[구조 패턴] 퍼사드 패턴(Facade pattern)

퍼사드 패턴(Facade pattern, Singletone Abstract Factory, 싱글톤 추상 팩토리) GOF에 따르면 퍼사드 패턴은 "하위 시스템의 인터페이스 세트에 일관된 인터페이스를 제공하는 것" 하위 시스템의 복잡도를 감추는 동시에 그 전체 기능을 사용하기 쉬운 인터페이스로 제공한다. 실생활에서 퍼사드 패턴의 예시 세탁기 찌든 때, 에벌 빨래 두 가지 모드가 있다. 두 모드에 따라 세탁 방법이 다른다. 세제 투입량, 물 온도, 탈수시간 등등 위와 같은 잡다한 정보를 인터페이스 내부에 두고 두 가지 세탁 모드만 제공한다. 사용자는 복잡한 생각 없이 모드만 선택하면된다. 퍼사드 패턴을 쓰는 경우 레거시 백 엔드 시스템에 단일 접근 창구를 제공한다. 클래스에 드라이버 같은 API를 만든다. ..

[구조 패턴] 데코레이터 패턴(Decorator pattern, 장식자)

데코레이터 패턴을 이용하면 타깃 객체를 감싸 어떤 로직을 런타임에 동적으로 부여할 수 있다. 데코레이터 끼리도 감쌀 수 있어서 사실상 타깃 객체를 장식하는 경우의 수는 이론적으로 무한하다. 데코레이터 패턴은 상속 보다 유연하지만. 애플리케이션 실행하기 전엔,ㄴ 객체 타입과 동작방식을 알 수 없어서 더 복잡하다. 거의 모든 언어와 UI, 플랫폼, 백엔드 할 것없이 두루 쓰인다. 의도 데코레이터 패턴은 객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시키는 구조적 디자인 패턴이다. 데코레이터 예시 Order 인터페이스 가격, 피자 이름을 조회 가능 public interface Order { public double getPrice(); public String ..

[행동 패턴] 커맨드 패턴(Command Pattern, 명령 패턴)

Command Pattern(커맨드 패턴, 명령 패턴) 요청을 요청에 대한 모든 정보가 포함된 독립 실행형 객체로 변환하는 행동 디자인 패턴이다. 명령이 객체화되어 있다. Command 클래스 안에는 출력할 수 있는 메서드가 포함돼있다. execute() 하면 해당하는 Command의 멤버 변수의 string 값을 출력하도록 한다. 다양한 요청들이 있는 메서드들을 인수화할 수 있도록하면 요청의 실행을 지연 또는 대기열에 넣을 수 있도록 하고 또 실행 취소할 수 있도록 작업을 지원할 수 있도록 한다. 예제 (1) Command public interface Command extends Comparable{ void execute(); } 명령을 Queue에 넣고 실행한다. public static void..

[행동 패턴] 템플릿 메서드(Template Method)

템플릿 메서드(Template Method) Def) 알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴 부모 클래스에서 알고리즘의 골격을 정의하지만 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계를 오버라이드할 수 있도록 하는 행동 디자인 패턴을 말한다. 사용하는 경우 구현하려는 알고리즘이 일정한 프로세스가 있다. 여러 단계가 있다. 구현하려는 알고리즘이 변경 가능성이 있다. 템플릿 메서드 사용 방법 알고리즘을 여러 단계로 나눈다. 나눠진 알고리즘의 단계를 메소드로 선언한다. 알고리즘을 수행한 템플릿 메소드를 만든다. 하위 클래스에서 나눠진 메소드들을 오버라이드한다. 기본 설계 추상 클래스에 step1, 2, 3 을 나눠서 ..

[행동 패턴] 전략 패턴(Strategy Pattern)

인터페이스(Interface) 키보드나 디스플레이 따위처럼 사람과 컴퓨터를 연결하는 장치 기능에 대한 선언과 기능과 구현을 분리한다. 기능을 사용하는 통로 어떤 기능에 접근하는 접근점을 제공한다. 델리게이트(Delegate) 위임하다. 떠넘긴다는 뜻 두 객체간의 관계에서 어떤 객체가 기능을 수행할 때, 복잡한 기능을 개발하는 책임을 다른 객체로 떠넘긴다. 전략 패턴(스트레지티 패턴, Strategy Pattern) Def) 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어서 접근 점에서 서로 교환 가능하도록 하는 패턴을 말한다. 의도: 알고리즘들의 패밀리를 정의하고 각 패밀리를 별도의 클래스에 넣은 다음 그들의 객체들을 상호교환하도록 하는 행동 디자인 패턴을 말한다. 해결책: 특정 작업을 다양..

[개요] 디자인패턴(Design Pattern)이란?

소프트웨어 디자인패턴(software design pattern)이란? 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바뀔 수 있는 완성된 디자인은 아니고 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는 데 쓰이는 서술이나 템플릿이다. 개발자가 애플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데 쓰이는 형식화된 가장 좋은 관행이다. 디자인 패턴은 설계자들이 올바른 설계를 빨리 만들 수 있도록 도와준다. 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것이다. 「GoF의 디자인패턴」에서는 아래 세 가지로 구분한다. 복잡성, 상세도 및 설계 중인 전체 시스템에..