원형(Prototype) : 복제된 인스턴스언제 쓰면 좋을까요인스턴스화할 클래스를 런타임에 지정할 때제품 클래스 계통과 병렬적으로 만드는 팩토리 클래스를 피하고 싶을 때클래스의 인스턴스들이 서로 다른 상태 조합일 때추가적 특성런타임에 새로운 제품을 추가하고 삭제할 수
의도객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 합니다.다른 이름가상 생성자(Virtual Constructor)활용성어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때생성할 객
특징 :한 개의 클래스 인스턴스만을 갖도록 보장하고 이에 대한 전역적인 접근점을 제공클래스에서 자신의 유일한 인스턴스로 접근하는 방법을 자체적으로 관리다른 인스턴스가 생성되지 않도록 방지클래스 스스로 인스턴스에 대한 접근 방법 제공유일한 인스턴스는 서브클래싱으로 확장되
클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 적응시킵니다.서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킵니다.래퍼(wrapper)기존 클래스를 사용하고 싶은데 인터페이스가 맞지 않을때이미 만든 것을 재사용 하고자 하나 이 재사용 가능한 라이브
객체에 동적으로 새로운 책임을 추가할 수 있게 합니다. 기능을 추가하려면, 서브 클래스를 생성하는 것보다 융통성 있는 방법을 제공합니다.랩퍼(Wrapper)윈도우에 Text를 출력하는 서비스를 제공하는 TextView 클래스가 있다고 가정, TextView에 스크롤바
의도 : 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성함 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴부분 - 전체의 객체 계통을 표현하고 싶거나 사용자가 객체의 합성으로 생긴 복합 객체와 개별 객체 사이의 차이를 알지 않고도
구현에서 추상을 분리하여, 이들이 독립적으로 다양성을 가질 수 있도록 합니다.가교(Bridge)는 핸들/구현부(Handle/Body)라고도 합니다.동기다른 플랫폼에 이식하기 어렵습니다. 1) 활용성추상적 개념과 이에 대한 구현 사이의 지속적인 종속 관계를 피하고 싶을
복잡한 과정을 간단하게 제공한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의(시스템 → 서브시스템으로 구조화) → 복잡성을 줄인다공통적인 설계 목표 : 서브시스템들 사이의 의사
의도 :공유를 통해 많은 수의 소립 객체들을 효과적으로 지원함동기 :플라이급 객체는 공유 가능한 객체로 여러 비슷한 상황에서 사용 가능각각의 상황에서는 독립적인 객체로 동작따라서 같은 것을 놓고 상황에 따라 다른 특징으로 정의할 수 없음=>본질적 상태와 부가적 상태의
다른 객체에 대한 접근을 제어하기 위한 대리자 또는 자리채움자 역할을 하는 객체를 둡니다.대리자(Surrogate)어떤 객체에 대한 접근을 제어하는 한 가지 이유는 실제로 그 객체를 사용할 수 있을 때까지 객체 생성과 초기화에 들어가는 비용 및 시간을 물지 않겠다는 것
어떤 언어에 대해, 그 언어의 문법에 대한 표현을 정의하면서 그것(표현)을 사용하여 해당 언어로 기술된 문장을 해석하는 해석자를 함께 정의합니다.특정한 종류의 문제가 자주 발생할 때는, 어떤 간결한 언어를 써서 그 문제를 문장으로 표현하는 것이 나을 수 있습니다. 그러
내부 표현부를 노출하지 않고 어떤 집합 객체에 속한 원소들을 순차적으로 접근할 수 있는방법을 제공객체 내부 표현 방식을 모르고도 집합 객체의 각 원소들에 접근하고 싶을 때집합 객체를 순회하는 다양한 방법을 지원하고 싶을 때서로 다른 집합 객체 구조에 대해서도 동일한 방
한 집합에 속해있는 객체의 상호작용을 캡슐화하는 객체를 정의합니다.객체들이 직접 서로를 참조하지 않도록 하여 객체 사이의 소결합을 촉진시킵니다.개발자가 객체의 상호작용을 독립적으로 다양화시킬 수 있게 만듭니다.여러 객체가 잘 정의된 형태이기는 하지만복잡한 상호작용을 가
객체 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그변화를 통지받고 자동으로 갱신될 수 있게 만듭니다.종속자(Dependent), 게시-구독(Publish-Subscribe)객체 간에 일관성을 유지하
객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴, 이렇게 하면 객체는마치 자신의 클래스를 바꾸는 것처럼 보입니다.객체의 행동이 상태에 따라 달라질 수 있고, 객체의 상태에 따라서 런타임에 행동이 바뀔 때객체의 상태에 따라 달라지는 다중 분기 조건
인터페이스사람과 컴퓨터를 연결시켜주는 장치기능에 대한 선언과 구현 분리기능의 사용 통로위임( delegate )어떤 기능을 구현할때 그 책임을 다른 객체에게 떠넘기는 것다른 객체의 기능을 빌려서 사용하는것동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화합니다.또
객체의 연산에 알고리즘의 뼈대만 정의하고 각 단계에서 수행하는 구체적 처리는 서브클래스에서 하도록 함알고리즘 구조 자체는 그대로 둔 채 각 단계 처리를 서브클래스에서 재정의 할 수 있게 함서브클래스가 오버라이드 할 수 있는 추상 연산을 사용하여 알고리즘을 정의추상 연산
객체 구조를 이루는 원소에 대해 수행할 연산을 표현합니다. 연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의 할 수 있게 합니다.프로그램을 추상 구문 트리로 표현하는 컴파일러를 생각해 봅시다. 모든 변수들이 정의 되었는지를 점검하는 등 정적의미(stat
메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다.하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다.하나 이상의 객체가 요청을 처리해야 하고, 그 요청 처리자 중 어떤 것이
의도 :요청(실행 기능) 자체를 캡슐화함⇒ 재사용성 증가⇒ 호출자와 수신자 클래스 사이의 의존성 제거요청이 서로 다른 사용자를 매개변수로 만들고 요청을 대기 시키거나 로깅하며 되돌릴 수 있는 연산을 지원어떻게 요청을 처리하는 객체와 요청을 연결할 것 인가에 중점을 둠다
복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 합니다.복합 객체의 생성 알고리즘이 이를 합성하는 요소 객체들이 무엇인지 이들의 조립 방법에 독립적일 때합성할
캡슐화를 위배하지 않은 채 어떤 객채의 내부 상태를 잡아내고 실체화시켜 둠으로써(=스냅샷) 해당 객체가 그 상태로 되돌아 올 수 있게 함토큰(Token)체크포인트 구현이나 오류를 복구하거나 연산 수행 결과를 취소하는 메커니즘 구현 시 내부 상태 기록이 필요함객체는 자체