구조가 복잡한 시스템을 개발하기 쉽도록 클래스나 객체를 조합하여 더 큰 구조로 만드는 패턴

 

1. 어댑터

- 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 사용가능하게 변환

- 클래스를 새로 만들기 싫은데 인터페이스가 일치하지 않을 때

 

2. 브리지

- 구현부에서 추상층을 분리하여 독립적으로 확장할 수 있도록 구성

- 기능과 구현을 2개의 별도의 클래스로 구현

 

3. 컴포지트

- 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 사용 다루고자 할 때

- 객체들을 트리 구조로 구성하여 복합 객체 안에 복합 객체가 포함되는 구조 구현 가능

 

4. 데코레이터

- 객체 간의 결합을 통해 능동적으로 기능들을 확장 가능

- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식

 

5. 퍼싸드

- 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성 / 서브 클래스들의 기능을 간편하게 사용 할 수 있는 패턴

- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요하다.

 

6. 플라이웨이트

-인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 한 공유를 통해 메모리를 절약

- 다수의 유사 객체를 생성하거나 조작할 때 사용

 

7. 프록시

- 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴이다.

- 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 주로 이용한다.