클래스와 객체의 구성에 관련된 패턴
클래스나 객체를 조합해, 더 큰 구조를 만드는 패턴
예시
서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공,
객체들을 서로 묶어 새로운 기능을 제공
호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환
기존의 클래스를 이용하고 싶지만, 인터페이스가 일치하지 않을 때 이용
구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴
기능과 구현을 두 개의 별도 클래스로 구현
여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용
객체들을 트리 구조로 구성하여
디렉터리 안에 디렉터리가 있듯이, 복합 객체 안에 복합 객체가 포함되는 구조를 구현 가능
객체 간의 결합을 통해, 능동적으로 기능들을 확장할 수 있는 패턴
임의의 객체에 부가적인 기능을 추가하기 위해, 다른 객체들을 덧붙이는 방식으로 구현
복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써
서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴
서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요
인스턴스가 필요할 때마다 매번 생성하는 것이 아니고,
가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴
다수의 유사 객체를 생성/조작할 때 유용하게 사용
참고: 프록시 (Proxy, Proxy Server), 즉시로딩, 지연로딩