[Java] 61. 상속 vs 컴퍼지션 개념 정리

백하림's avatar
Feb 17, 2025
[Java] 61. 상속 vs 컴퍼지션 개념 정리

1️⃣ 상속 vs 컴퍼지션 개념 정리

✅ 상속(Inheritance)이란?

  • 부모 클래스의 기능을 자식 클래스가 상속받아 재사용하는 개념
  • extends 키워드를 사용하여 상속 관계를 만듦
  • 코드 재사용성과 일관성을 높일 수 있음

📌 상속을 사용할 때

is-a 관계일 때 사용 (ex: ShrimpBurger is a Burger)
✅ 부모 클래스의 기능을 그대로 사용하거나, 일부 수정해서 사용하고 싶을 때
코드의 일관성이 중요할 때 (ex: 모든 버거는 이름과 가격을 가져야 함)

⚠️ 상속의 단점

❌ 부모 클래스가 변경되면 자식 클래스들도 영향을 받음
❌ 다중 상속을 지원하지 않아 복잡한 구조에서는 불편할 수 있음
❌ 상속을 깊게 하면 코드가 오히려 복잡해질 수 있음

✅ 컴퍼지션(Composition)이란?

  • 객체를 포함(Has-a 관계)하여 기능을 조합하는 방식
  • extends를 사용하지 않고, 클래스의 필드로 다른 객체를 포함
  • 유연하고, 재사용성이 높으며, 의존성을 줄일 수 있음

📌 컴퍼지션을 사용할 때

has-a 관계일 때 사용 (ex: BurgerSet has a Burger and a Coke)
✅ 여러 개의 독립적인 객체를 조합해서 하나의 기능을 만들고 싶을 때
객체 간 결합도를 낮추고, 재사용성을 높이고 싶을 때

⚠️ 컴퍼지션의 단점

❌ 객체 간의 관계를 명확하게 설계해야 함
❌ 상속보다 구현할 코드가 많아질 수도 있음

✅ 언제 상속을 쓰고, 언제 컴퍼지션을 써야 할까?

사용 상황
상속(Inheritance)
컴퍼지션(Composition)
관계 유형
is-a 관계 (ex: ShrimpBurger is a Burger)
has-a 관계 (ex: BurgerSet has a Burger and Coke)
코드 재사용
부모의 기능을 그대로 쓰거나 일부 수정할 때 유리
조합을 통해 새로운 기능을 만들 때 유리
유연성
부모 클래스 변경 시 자식 클래스에 영향
독립적인 객체를 조합하므로 영향이 적음
실무 적용
공통 기능을 가진 객체들을 만들 때
여러 개의 독립적인 객체를 합쳐야 할 때

📌 결론

  • "상속" 은 객체 간 명확한 is-a 관계가 있을 때 적절
  • "컴퍼지션"객체를 조합하여 새로운 기능을 만들 때 유리
  • 실무에서는 컴퍼지션을 더 선호 (유연성이 높고 유지보수하기 쉬움)
Share article

harimmon