더 큰 기능을 가진 객체나 클래스를 작은 객체나 클래스로 조합하여 새로운 기능을 만드는 프로그래밍 기법

Composition에는 다음과 같은 주요 개념이 포함됩니다:

  1. Has-A 관계: 특정 객체가 다른 객체를 “사용”한다는 의미를 가진다. 자동차 객체는 엔진 객체를 가지고 있을 것이다.
  2. 재사용성과 모듈화: 사용한다는 개념이 들어갔으므로, 당연히 이를 떼어냈을 거라는 상상을 할 수 있다. 떼어낸다는 것은 곧 다른 객체에서도 사용이 가능함을 의미한다.
  3. 의존성 관리: 상속은 어떻게 보면 굉장히 객체간의 끈적한 관계를 가지게 만든다. Composition은 “조합”의 개념으로 구성하기 때문에 보다 결합도가 줄어든다.
  4. 동적인 구성: 런타임에 객체를 추가하거나 제거할 수 있다. 이는 유연하고 확장 가능한 시스템을 만드는 데 도움이 된다.

예를 들어, 소프트웨어에서 그래픽 편집기를 개발하는 경우, 다양한 도형(원, 사각형, 선 등)을 표현하는 클래스를 만들고, 이러한 도형들을 조합하여 복잡한 그림을 만들 수 있습니다. 이때 Composition을 사용하여 그림은 다양한 도형으로 이루어져 있음을 나타낼 수 있습니다.

Composition은 상속과 함께 객체 지향 프로그래밍의 중요한 개념 중 하나이며, 객체 간의 관계를 효과적으로 설계하고 유연한 소프트웨어를 개발하는 데 도움이 됩니다.

Reference