0Pricing
C++ Academy · 강의

상속과 컴포지션의 상충 관계

상속과 컴포지션을 비교하고 설계에 맞는 도구를 선택합니다.

상속과 컴포지션의 상충 관계은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

코드를 재사용하는 두 가지 방법

다른 클래스에서 상속받거나, 다른 클래스를 멤버로 조합하여 코드를 재사용할 수 있습니다. 두 방법 모두 적절한 용도가 있습니다.

상속: "~이다"

derived 클래스가 실제로 base의 특수한 종류일 때 상속을 사용하십시오.

class Vehicle {};
class Car : public Vehicle {};       // a Car IS a Vehicle
class SportsCar : public Car {};

조합: "가지고 있다"

관계가 "가지고 있다" 또는 "사용한다"일 때 조합을 사용하십시오.

class Engine {};
class Car {
    Engine engine_;                  // a Car HAS an Engine
};

결합도의 절충

상속은 강한 결합을 만듭니다 — derived 클래스가 base의 내부 구현에 의존하기 때문입니다. 조합은 모듈을 독립적으로 유지하므로 변경하기가 더 쉽습니다.

유연성

조합을 사용하면 실행 시간에 동작을 변경할 수 있습니다 — 조합된 객체를 교체하면 됩니다. 상속은 동작을 컴파일 시간에 결정합니다.

class Logger {
    std::unique_ptr<LogSink> sink_;   // can swap implementations
public:
    void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};

테스트

조합된 객체는 테스트를 위해 모의 객체로 교체할 수 있습니다. 상속된 base 클래스는 가상 함수나 템플릿 없이는 모의 객체로 만들기 어렵습니다.

취약한 base 클래스 문제

base 클래스의 변경이 여러 derived 클래스를 손상시킬 수 있습니다. 조합을 사용하면 변경 사항이 조합하는 클래스에 국한됩니다.

상속을 선택할 경우

다음과 같은 경우 상속이 적합합니다:

  • 명확한 "~이다" 관계가 존재합니다
  • base 인터페이스를 통한 다형성이 필요합니다
  • base 클래스가 상속을 고려하여 명시적으로 설계되었습니다

조합을 선택할 경우

다음과 같은 경우 조합이 적합합니다:

  • 구현을 교체할 수 있는 유연성이 필요합니다
  • 관계가 "가지고 있다" 또는 "사용한다"입니다
  • 낮은 결합도와 쉬운 테스트를 원합니다

전략 패턴

조합과 다형성을 결합하십시오. 호스트 클래스가 조합하는 전략 객체를 base 클래스 포인터로 저장합니다.

class Sorter {
    std::unique_ptr<SortStrategy> strategy_;
public:
    void sort(std::vector<int>& v) { strategy_->execute(v); }
};

믹스인과 정책 클래스

컴파일 시간 사용자 지정을 위해 템플릿화된 정책 클래스를 사용하십시오 — 타입 수준의 조합입니다. 강력하면서도 실행 시간 오버헤드가 없습니다.

인터페이스 + 조합

현대적인 일반 패턴은 인터페이스(추상 base)를 정의하고 이를 구현하는 구체적인 클래스를 조합하는 것입니다. 인터페이스에는 상속을, 구현에는 조합을 사용합니다.

빠른 확인

일반적으로 더 높은 유연성과 더 낮은 결합도를 제공하는 접근 방식은 무엇인가요?

복습

상속은 "~이다"를, 조합은 "가지고 있다"를 모델링합니다. 조합은 더 유연하고 결합도가 낮으므로 코드 재사용에 우선 사용하십시오. 인터페이스를 통한 다형성에는 상속을 사용하고, 구현은 조합하는 방식을 함께 활용하는 경우가 많습니다.

자주 묻는 질문

“상속과 컴포지션의 상충 관계” 강의는 무료인가요?

네 — “상속과 컴포지션의 상충 관계” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“상속과 컴포지션의 상충 관계”에서 뭘 배우나요?

상속과 컴포지션을 비교하고 설계에 맞는 도구를 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“상속과 컴포지션의 상충 관계” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 단일 상속과 다중 상속
  2. 가상 함수와 vtable
  3. 추상 class와 순수 가상 메서드
  4. 상속과 컴포지션의 상충 관계
← C++ Academy(으)로 돌아가기