Book/Design Patterns

    Head First: Design Patterns - 컴파운드 패턴(Compound Pattern): MVC 패턴

    디자인 패턴: 컴파운드 패턴(Compound Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Compound Pattern 이란? 컴파운드 패턴(Compound Pattern은 일련의 패턴을 함께 사용하여 다양한 디자인 문제를 해결한다. 반복적으로 생길 수 있는 일반적인 문제를 해결하기 위한 용도로 사용된다. 간단히 설명하면 패턴으로 이루어진 패턴이다. 대표적인 컴파운드 패턴: MVC 패턴 MVC(Model-View-Controller) 패턴는 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 모델, 뷰, 컨트롤러라는 세가지 역할로 구분한 패턴이다. 요약하면 다음과 같다. Model: 애플리케이션의 데이터, 자료를 의미한다..

    Head First: Design Patterns - 프록시 패턴(Proxy Pattern): 보호 프록시(protection proxy)

    디자인 패턴: 프록시 패턴(Proxy Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Proxy Pattern 이란? 프록시 패턴(Proxy Pattern) 은 어떤 객체에 대한 접근을 제어하기 위한 용도로, 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다. 먼저 Proxy Pattern에서 사용되는 용어와 방법들을 알아보고, 예제를 들겠다. 프록시에서 접근을 제어하는 방법 원격 프록시(remote proxy)를 써서 원격 객체에 대한 접근을 제어할 수 있다. 가상 프록시(v..

    Head First: Design Patterns - 프록시 패턴(Proxy Pattern): 가상 프록시(virtual proxy)

    디자인 패턴: 프록시 패턴(Proxy Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Proxy Pattern 이란? 프록시 패턴(Proxy Pattern) 은 어떤 객체에 대한 접근을 제어하기 위한 용도로, 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다. 먼저 Proxy Pattern에서 사용되는 용어와 방법들을 알아보고, 예제를 들겠다. 프록시에서 접근을 제어하는 방법 원격 프록시(remote proxy)를 써서 원격 객체에 대한 접근을 제어할 수 있다. 가상 프록시(v..

    Head First: Design Patterns - 프록시 패턴(Proxy Pattern): 원격 프록시(remote proxy)

    디자인 패턴: 프록시 패턴(Proxy Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Proxy Pattern 이란? 프록시 패턴(Proxy Pattern) 은 어떤 객체에 대한 접근을 제어하기 위한 용도로, 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다. 먼저 Proxy Pattern에서 사용되는 용어와 방법들을 알아보고, 예제를 들겠다. 프록시에서 접근을 제어하는 방법 원격 프록시(remote proxy)를 써서 원격 객체에 대한 접근을 제어할 수 있다. 가상 프록시(v..

    Head First: Design Patterns - 스테이트(상태) 패턴(State Pattern)

    디자인 패턴: 스테이트 패턴(State Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. State Pattern 이란? 스테이트(상태) 패턴(State Pattern)을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 스테이트 패턴은 컨텍스트 객체에 수많은 조건문을 집어넣는 대신에 사용할 수 있는 패턴이라고 생각할 수 있다. Context라는 클래스에는 여러가지 내부 상태가 들어있을 수 있다. Context의 request() 메소드가 호출되면 그 작업은 상태 객체에게 맡겨진다. State 인터페이스에서는 모든 구상 상태 클래스에 대한 공통 인..

    Head First: Design Patterns - 템플릿 메소드 패턴(Template Method Pattern)

    디자인 패턴: 템플릿 메소드 패턴(Template Method Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Template Method Pattern 이란? 템플릿 메소드 패턴(Template Method Pattern)에서는 메소드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있다. 템플릿(Template)이란 일련의 단계들로 알고리즘을 정의한 메소드이다. 여러 단계 가운데 하나 이상이 추상 메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현된다. 이렇게 함으로써 서브클..

    Head First: Design Patterns - 퍼사드 패턴(Facade Pattern)

    디자인 패턴: 퍼사드 패턴(Facade Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Facade Pattern 이란? 퍼사드 패턴(Facade Pattern)은 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준의 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다는 장점이 있다. (복잡한 추상화 같은 것이 필요 없다.) 퍼사드 패턴을 사용하려면, 어떤 서브시스템에 속한 일련의 복잡한 클래스들을 단순화하고 통합한 클래스를 만들어야 한다. 위에서처럼 서브 시스템들을 통합한 인터페이스인 퍼사드 클래스를 사용한다. 홈 씨어터 영화를 보려면 Light를 키고, Projector를 ..

    Head First: Design Patterns - 어댑터 패턴(Adapter Pattern)

    디자인 패턴: 어댑터 패턴(Adapter Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Adapter Pattern 이란? 어댑터 패턴(Adapter Pattern)은 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 어댑터를 사용함으로써 클라이언트와 구현된 인터페이스를 분리시킬 수 있으며, 나중에 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화되기 때문에 클라이언트는 바뀔 필요가 없다. 어댑티를 새로 바뀐 인터페이스로 감쌀 때는 객체 구성(Composition)을 사용한다. 이런 접근법을..

    Head First: Design Patterns - 커맨드 패턴(Command Pattern)

    디자인 패턴: 커맨드 패턴(Command Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Command Pattern 이란? 커맨드 패턴(Command Pattern)을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구사항을 집어넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수 도 있고, 작업취소 기능도 지원 가능하다. 작업을 요청한 쪽과 그 작업을 처리하는 쪽을 분리시킬 수 있다는게 핵심이다. 커맨드 패턴에서는 커맨드 객체라는 일련의 행동을 특정 리시버하고 연결시킴으로써 요구사항을 캡슐화한다. 이렇게 하기 위해서 행동과 리시버를 한 객체에 집어넣고, execute()라는..

    Head First: Design Patterns - 싱글턴 패턴(Singleton Pattern)

    디자인 패턴: 싱글턴 패턴(Singleton Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Singleton Pattern 이란? 싱글턴 패턴(Singleton Pattern)은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴이다. 중요한 것은 정적 변수와 정적 메소드이다. 천천히 살펴보겠다. 고전적인 싱글턴 패턴 싱글턴 패턴을 구현하기 위해서는 일반적으로 private 생성자를 가진 public 클래스를 이용한다. 앞서 말한 클래스의 경우에는 인스턴스를 절대 생성할 수 없으므로, 외부에서 생성하는 것이 아닌 인스턴스를 요청하도록 설계하여야 한다. 이 때 사용되는 getIn..