상속 vs 조합 가이드: 객체 지향에서 무엇을 더 자주 써야 할까
Dev

상속 vs 조합 가이드: 객체 지향에서 무엇을 더 자주 써야 할까


객체 지향을 배우다 보면 상속은 굉장히 “객체 지향다운” 도구처럼 느껴집니다. 하지만 실무로 갈수록 상속보다 조합을 선호하라는 말을 더 자주 듣게 됩니다. 왜 이런 차이가 생길까요?

이 글에서는 아래 내용을 정리합니다.

  • 상속과 조합이 어떻게 다른지
  • 왜 조합을 더 선호하는 경우가 많은지
  • 각각이 잘 맞는 상황은 무엇인지

핵심은 상속은 강한 결합을 만들기 쉽고, 조합은 역할을 더 유연하게 바꿀 수 있어 변화에 더 잘 대응하는 경우가 많다는 점입니다.

상속이란 무엇인가

상속은 기존 타입을 확장해서 새로운 타입을 만드는 방식입니다.

예를 들어:

  • Animal
  • Dog extends Animal

처럼 상위 타입의 속성과 행동을 하위 타입이 이어받는 구조입니다.

조합이란 무엇인가

조합은 필요한 기능을 다른 객체와의 협력으로 구성하는 방식입니다.

예를 들어 어떤 객체가 직접 모든 기능을 상속받는 대신:

  • 결제 전략 객체
  • 알림 객체
  • 저장 객체

를 내부에서 조합해서 쓰는 식입니다.

즉, “무엇의 일종인가”보다 “어떤 것들과 협력하는가”에 더 초점이 있습니다.

왜 조합을 더 선호하는 경우가 많을까

상속은 편해 보이지만 구조가 깊어질수록:

  • 변경 영향이 위아래로 번지고
  • 하위 타입 제약이 커지며
  • 재사용보다 결합이 더 커질 수 있습니다

반면 조합은 필요한 역할을 객체 단위로 교체하거나 분리하기가 더 쉽습니다.

즉, 변화가 잦은 코드에서는 조합이 더 유연한 경우가 많습니다.

상속이 잘 맞는 경우는 없을까

물론 있습니다. 정말로:

  • is-a 관계가 자연스럽고
  • 상위 타입 규약을 하위 타입이 안정적으로 지키며
  • 구조가 과도하게 복잡해지지 않는다면

상속이 깔끔한 선택일 수 있습니다.

문제는 상속이 너무 쉽게 “코드 재사용용 도구”로 오용된다는 점입니다.

조합은 어떤 장점이 있을까

  • 구현 교체가 쉬움
  • 테스트가 쉬움
  • 결합이 상대적으로 낮음
  • 역할을 더 잘 분리할 수 있음

그래서 전략 패턴, 의존성 주입 같은 설계와도 잘 맞습니다.

자주 하는 오해

1. 상속은 객체 지향의 핵심이니 많이 써야 한다

객체 지향의 핵심은 협력 구조이지, 상속 자체가 아닙니다.

2. 조합은 클래스가 많아져서 무조건 복잡하다

겉으로는 객체 수가 늘어도, 변경 가능한 구조로 보면 더 단순할 수 있습니다.

3. 상속과 조합은 하나만 써야 한다

둘 다 도구이고, 상황에 따라 적절히 선택하는 것이 좋습니다.

FAQ

Q. 입문자는 무엇을 더 먼저 익히면 좋을까

상속 문법보다 조합이 왜 유연한지 먼저 이해하는 것이 실무 감각에 더 도움이 됩니다.

Q. 상속을 완전히 피해야 하나

그럴 필요는 없습니다. 다만 “정말 상속이 맞는 관계인가”를 더 엄격히 보는 것이 좋습니다.

Q. 조합은 어떤 설계와 잘 맞나

전략 패턴, 의존성 주입, 역할 분리와 잘 맞습니다.

먼저 읽어볼 가이드

검색 유입이 많은 핵심 글부터 이어서 보세요.