Design Pattern이란, Product-ability와 Reliability를 높이기 위한 Re-usability이다.
여기서 Re-usability의 범위는 언어, 표준 라이브러리, 오픈 소스 등의 다양한 범위를 가진다.
일반적으로, 흔히 발생하는 문제를 주어진 맥락에서 해결할 수 있도록 하는 재사용가능한 해결책이다.
디자인 패턴은, 사용자(개발자)가 application이나, system을 설계할 때 발생하는 문제를 해결하기 위한 최고의 방법들이다.
Design Pattern은 computer Programming에 있어서 구조화된 접근 방식이다.
클래스들과 Objects들 사이에 관계 혹은 상호작용들을 보여준다.

Adapter design pattern은 다음과 같은 문제를 해결해준다. (예시)
한 클래스의 인터페이스(Adaptee)를 클라이언트에서 사용하고자하는 다른 인터페이스(Target)로 변환한다.
이렇게 할 경우 인터페이스를 다시 만들 필요 없이 간단하게 전환하여 재사용이 가능하다.
Adapter Pattern 그림 (UML)

UML이란? (Unified Modeling Language)
소프트웨어 집약 시스템의 구조와 행동을 시각적으로 명세화, 설계, 문서화하는 표준화된 범용 모델링 언어.
선의 의미

복잡한 클래스 라이브러리에 대해 사용하기 편하게 간편한 인터페이스(API)를 구성하기 위한 구조 패턴이다.
Facade Pattern은 다음과 같을 때 사용한다.
Facade 장점
하위 시스템의 복잡성에서 코드를 분리하여, 외부에서 시스템을 사용하기 간단해진다.
하위 시스템 간의 의존 관계가 많을 경우 이를 감소시키고 의존성을 한 곳으로 모을 수 있다.
복잡한 코드를 감춤으로써, 클라이언트가 시스템의 코드를 모르더라도 Facade 클래스만 이해하고 사용 가능하다.

대상 객체에 대한 기능 확장이나 변경이 필요할때 객체의 결합을 통해 서브클래싱을 사용할 수 있다.
이러한 Decorator Pattern은 동적 할당하며, 실시간 동안 추가되거나 삭제되어야한다.
Decorator Pattern 장점

Decorator Pattern의 대표적 예시 : 게임
무기 및 아이템 강화
캐릭터 버프 및 상태 이상
1977~79년 Chritopher Alexander에 의해 창시되었다.
이후 1987년 Ward Cunningham과, Kent Beck이 OOPSLA 컨퍼런스에 5가지의 Design Pattern을 발표한다.
1994년 Gang of Four(GoF)이라는 네 명의 개발자가《Design Patterns: Elements of Reusable Object-Oriented Software》라는 책을 발간하며, 전 세계 개발자들의 '성경'이라 불린다.
