inblog logo
|
harimmon
    자바

    [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

    RSS·Powered by Inblog