Inflearn brand logo image

인프런 커뮤니티 질문&답변

eoyeong님의 프로필 이미지
eoyeong

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

상속과 조합

조합 관계에 대해 질문있습니다.

작성

·

145

0

  • 학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!

  • 먼저 유사한 질문이 있었는지 검색해 보세요.

  • 서로 예의를 지키며 존중하는 문화를 만들어가요.

     

 안녕하세요.

이번 강의에서 상속 구조를 조합으로 풀어내면 유연해진다고 하셨는데

Cell의 공통 부분을 뽑아내서 CellState로 만들어서 EmptyCell, LandMineCell, NumberCell에서 사용하게 되는데 이러면 결국 CellState와 결합도가 높아지는 것 아닌가요??

EmptyCell, LandMineCell, NumberCell과 CellState사이에 인터페이스를 만들지 않는 이상 Cell을 부모로 사용할 때와 큰 차이가 없는 것 같은데
( 결국 CellState에서 변경이 일어나면 CellState를 사용하는 곳에서도 변경을 해줘야 하니까 부모인 Cell에서 변경이 일어나면 자식도 변경을 해줘야 한다는 것과 동일하다고 생각했습니다 )

잘못 생각하고 있는 부분일까요..?

답변 2

1

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 대영 님!

네, 일단 각 Cell이 CellState와는 직접적인 관계를 가지고 있으니 그 자체의 결합도는 높다고 볼 수 있겠습니다.
다만, 여기서는 상속 구조와 조합 구조의 비교가 포인트인데요.

상속 구조에서는 부모의 메서드 시그니처와 그 내용을 자식이 그대로 받게 되어, 부모의 변경이 자식들에게 직접적으로 영향을 미치는 구조이지만, 그에 비해 조합 관계는 CellState의 내부에서 어떤 변경이 일어나더라도 Cell에는 영향을 주지 않을 수 있다는 것입니다.
물론 Cell에서 사용하고 있는 CellState의 메서드 시그니처가 변경되거나, CellState의 이름이 바뀌거나 한다면 말씀하신대로 직접적인 영향을 받겠지만, CellState의 외부 스펙을 유지하면서 내부 구현은 자유롭게 변경할 수 있다, 라는 관점입니다.

도움이 되셨기를 바랍니다.
감사합니다. 🙂

eoyeong님의 프로필 이미지
eoyeong
질문자

답변 감사합니다 😄

0

안녕하세요, 인프런 AI 인턴입니다. 대영님!

조합 관계와 상속의 차이를 이해하는 것은 객체지향 설계의 핵심 중 하나입니다. 질문하신 내용을 바탕으로 설명드리겠습니다.

조합과 상속 차이:

  1. 상속:

    • 상속은 부모 클래스가 가진 속성과 메서드를 자식 클래스가 물려받는 구조입니다.
    • 이는 강한 결합을 초래할 수 있으며, 부모 클래스에 변경이 발생했을 때 그것이 모든 자식 클래스에 영향을 미칠 수 있습니다.
  2. 조합(컴포지션):

    • 조합은 객체가 포함 관계로 구성되는 방식입니다.
    • 객체 간의 결합도를 낮출 수 있으며, 각 객체를 독립적으로 수정할 수 있는 장점이 있습니다.

CellState와의 결합도:

사실, 조합을 사용한다고 해서 항상 결합도가 낮아지는 것은 아닙니다. 대신, 조합은 종종 객체 관계를 보다 유연하게 변화시킬 수 있도록 합니다. 예를 들어, CellState를 다양한 구현으로 바꿀 수 있으며, CellState가 인터페이스를 통해 구현되면 더 좋습니다.

대영님이 제기하신 것처럼 결과적으로 변경의 영향을 받는 위치는 비슷할 수 있습니다. 하지만 조합을 통해 각 구성 요소가 더욱 독립적으로 변형될 수 있으며, 테스트나 기능 확장 측면에서 유연성을 제공할 수 있습니다. 이것이 상속보다 조합을 선호하는 이유 중 하나입니다.

관련된 개념과 유사한 토의는 다음과 같은 게시물을 통해 추가 정보를 얻으실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

eoyeong님의 프로필 이미지
eoyeong

작성한 질문수

질문하기