Composition

김이홍·2023년 6월 1일

객체 지향 프로그래밍(OOP)은 현실 세계의 객체를 소프트웨어로 모델링하기 위한 개념과 방법론입니다. OOP에서는 객체 간의 관계를 표현하기 위해 다양한 기법과 원칙을 사용합니다. 그 중 하나인 Composition은 객체 간의 구성 관계를 나타내는 방법으로, 객체를 다른 객체의 일부로 포함시키는 것을 의미합니다. 이번 글에서는 Composition에 대해 자세히 알아보도록 하겠습니다.

Composition의 개념

Composition은 "구성" 또는 "합성"이라는 의미를 가지며, 객체 간의 구성 관계를 표현하는 방법입니다.
Composition은 한 객체가 다른 객체를 포함하고 있는 관계로, "has-a" 관계로 표현됩니다. 예를 들면, 자동차는 엔진을 가지고 있다고 말할 수 있습니다.
Composition의 특징

Composition은 객체 간의 강한 연결을 나타냅니다. 한 객체가 다른 객체에 종속적이며, 부분 객체가 소멸하면 전체 객체도 함께 소멸될 수 있습니다.
Composition은 객체 간의 생명 주기가 동일하거나, 부분 객체가 전체 객체에 종속적인 경우에 주로 사용됩니다.
Composition은 객체 간의 관계를 구성하는 중요한 도구로 사용되며, 객체 간의 의존성을 명확하게 표현할 수 있습니다.
Composition의 예시

자동차와 엔진: 자동차는 엔진을 가지고 있으며, 자동차가 소멸하면 엔진도 함께 소멸됩니다. 자동차 클래스에는 엔진 객체를 멤버 변수로 포함시키는 것으로 Composition을 표현할 수 있습니다.
주문과 상품: 주문은 여러 상품을 포함하고 있으며, 주문이 취소되면 상품도 함께 취소될 수 있습니다. 주문 클래스에는 상품 객체들을 리스트 형태로 포함시키는 것으로 Composition을 표현할 수 있습니다.
Composition의 장점

코드 재사용성과 모듈화를 촉진합니다. 부분 객체를 독립적으로 설계하고 구현할 수 있으며, 이후에 전체 객체에 포함시키는 방식으로 코드를 작성할 수 있습니다.
객체 간의 관계가 명확하게 드러나기 때문에 코드의 가독성을 향상시킵니다. Composition을 사용하면 객체 간의 의존성이 명시적으로 표현되어 유지보수가 용이합니다.
객체의 일부를 독립적으로 변경할 수 있으므로, 유연성과 확장성이 높아집니다.
Composition vs Inheritance

Composition과 Inheritance는 객체 간의 관계를 나타내는 두 가지 주요한 방법입니다.
Composition은 객체 간의 강한 연결을 나타내며, 런타임에 동적으로 객체를 조립할 수 있습니다. 반면에 Inheritance는 객체 간의 계층 구조를 나타내며, 컴파일 타임에 정적으로 상속 계층을 결정합니다.
Composition은 코드의 재사용성과 모듈화를 강조하며, 객체 간의 관계가 유연하게 변경될 수 있습니다. Inheritance는 코드의 확장성과 다형성을 강조하며, 상속 계층을 통해 공통된 특성을 상속받을 수 있습니다.

결론

Composition은 객체 지향 프로그래밍에서 객체 간의 구성 관계를 나타내는 중요한 개념입니다. 객체를 다른 객체의 일부로 포함시키는 방식으로 객체 간의 관계를 명확하게 표현할 수 있습니다. Composition을 통해 코드의 재사용성과 모듈화를 촉진하고, 객체 간의 의존성을 명시적으로 표현하여 가독성과 유지보수성을 향상시킬 수 있습니다. Composition은 Inheritance와 함께 객체 간의 관계를 표현하는 중요한 도구로 사용되며, 상황에 맞게 적절히 선택하여 OOP의 장점을 최대한 활용할 수 있습니다.

0개의 댓글