Design Pattern

    [GoF Design Patterns] Proxy

    [GoF Design Patterns] Proxy

    어느덧 Structural Patterns의 마지막 키워드 입니다!1. 목적Proxy는 다른 객체에 대한 대체(Substitute) 또는 Placeholder를 제공하는 패턴입니다.또한 원래 객체에 대한 접근을 제어하므로, 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 합니다.2. 문제 상황왜 객체에 대한 접근을 제한할까요?고민을 위해 엄청난 양의 시스템 리소스를 소비하는 큰 객체가 있다고 가정해봅시다.이 객체는 필요할 때가 있기는 하지만, 항상 필요한 것은 아닙니다.개발자는 실제로 필요한 순간에만 이 객체를 만들어서 지연 초기화(Lazy Initialization)을 구현할 수 있습니다.그러면 객체를 사용하는 모든 Client 코드에서 지연 초기화 코드를 실행해야 합니다.하지..

    [GoF Design Patterns] Flyweight

    [GoF Design Patterns] Flyweight

    Flyweight 패턴은 Cache로도 알려져 있습니다.Cache가 더욱 친숙합니다.1. 목적객체들의 모든 데이터를 유지하는 대신에 여러 객체들 간에 공통된 상태 부분을 공유함으로써 사용 가능한 RAM 공간에 더 많은 객체를 넣을 수 있게 하는 패턴입니다.알면서도 모르겠습니다.2. 문제 상황플레이어들이 맵을 돌아다니며 싸우는 게임을 만든다고 가정합니다.방대한 양의 총알, 미사일, 파편들이 맵 전체를 날아다니는 경험을 주기 위해 현실적인 입자 시스템(Particle System)을 만들고자 합니다.게임을 완성시키고, 테스트를 위해 친구에게 게임을 전달했습니다.하지만 여러분의 컴퓨터에서 잘 실행되는 게임이 친구의 컴퓨터에서는 몇 분 플레이한 후 계속 충돌하게 됩니다.원인을 알아보니 친구의 컴퓨터는 여러분의 ..

    [GoF Design Patterns] Facade

    [GoF Design Patterns] Facade

    Structural Patterns들을 계속해서 알아봅시다.1. 목적Library, Framework 또는 기타 복잡한 Class 집합에 대한 단순화된 인터페이스를 제공합니다.2. 문제 상황정교한 Library나 Framework에 속하는 광범위한 객체 집합으로 코드를 작동시켜야 한다고 가정해 봅시다.일반적으로 사용할 객체들을 초기화하고, 종속성을 추적하고, 순서에 맞는 메서드를 실행합니다.결과적으로 클래스의 비즈니스로직이 타사 클래스들의 세부 구현 사항들과 밀접하게 결합되어 있어 코드를 이해하고 유지 관리하기 어려워집니다.3. 해결책Facade 패턴을 이용한다면 복잡한 하위 시스템에 대한 간단한 인터페이스를 제공하는 클래스를 생성합니다.하위 시스템 자체를 직접 사용하는 것보다는 제한된 기능이 제공될 ..

    [GoF Design Patterns] Decorator

    [GoF Design Patterns] Decorator

    오늘 알아볼 패턴은 Decorator입니다.Wrapper라고도 알려져있는데요. 이전에 알아본 Adapter 패턴도 Wrapper라고 불렸습니다.두 패턴 모두 Wrapper불리는 이유와 어떤 차이점 있는지도 알아보도록 합시다.1. 목적객체들을 특수 Wrapper 객체들 내에 넣어서 새로운 동작을 추가할 수 있도록 하는 패턴입니다.2. 문제 상황어떠한 프로그램에서 사용자에게 중요한 이벤트를 알려주는 알림 라이브러리를 개발하고 있다고 가정합시다.초기에는 몇 개의 프로퍼티와 하나의 생성자 그리고 send라는 메서드를 갖는 Notifier 클래스가 있었습니다.send 메서드는 클라이언트로부터 메세지를 인자로 받은 후 Notifier의 생성자를 통해 Notifier에게 전달된 이메일 목록으로 알림을 보냅니다.클라이..

    [GoF Design Patterns] Composite

    [GoF Design Patterns] Composite

    Composite Pattern에 대해 알아봅시다.Composite 패턴은 복합체 패턴이라고도 불리는 만큼, Composite는 합성물이라는 의미를 가지고 있습니다.실제 패턴에서도 그러한지 살펴봅시다.1. 목적객체를 트리 구조로 구성한 다음 개별 객체와 객체 그룹을 동일하게 다룰 수 있도록 하는 패턴입니다.2. 문제 상황객체를 트리 구조로 구성해야 한다는 점에서 어플리케이션의 핵심 모델을 트리구조로 표현할 수 있는 경우에만 패턴을 사용하는 의미가 있습니다.Products와 Boxes 두 가지 객체가 있습니다.Box에는 여러 개의 Products와 Boxes이 포함될 수 있습니다.물론 다시 하위 Boxes에도 여러 개의 Products와 Boxes가 다시 포함될 수 있습니다.그림을 거꾸로 보면 나무와 같은..