작성
·
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의 외부 스펙을 유지하면서 내부 구현은 자유롭게 변경할 수 있다, 라는 관점입니다.
도움이 되셨기를 바랍니다.
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다. 대영님!
조합 관계와 상속의 차이를 이해하는 것은 객체지향 설계의 핵심 중 하나입니다. 질문하신 내용을 바탕으로 설명드리겠습니다.
상속:
조합(컴포지션):
사실, 조합을 사용한다고 해서 항상 결합도가 낮아지는 것은 아닙니다. 대신, 조합은 종종 객체 관계를 보다 유연하게 변화시킬 수 있도록 합니다. 예를 들어, CellState
를 다양한 구현으로 바꿀 수 있으며, CellState
가 인터페이스를 통해 구현되면 더 좋습니다.
대영님이 제기하신 것처럼 결과적으로 변경의 영향을 받는 위치는 비슷할 수 있습니다. 하지만 조합을 통해 각 구성 요소가 더욱 독립적으로 변형될 수 있으며, 테스트나 기능 확장 측면에서 유연성을 제공할 수 있습니다. 이것이 상속보다 조합을 선호하는 이유 중 하나입니다.
관련된 개념과 유사한 토의는 다음과 같은 게시물을 통해 추가 정보를 얻으실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다 😄