조합 관계에 대해 질문있습니다.
164
57 asked
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!
먼저 유사한 질문이 있었는지 검색해 보세요.
서로 예의를 지키며 존중하는 문화를 만들어가요.
안녕하세요.
이번 강의에서 상속 구조를 조합으로 풀어내면 유연해진다고 하셨는데
Cell의 공통 부분을 뽑아내서 CellState로 만들어서 EmptyCell, LandMineCell, NumberCell에서 사용하게 되는데 이러면 결국 CellState와 결합도가 높아지는 것 아닌가요??
EmptyCell, LandMineCell, NumberCell과 CellState사이에 인터페이스를 만들지 않는 이상 Cell을 부모로 사용할 때와 큰 차이가 없는 것 같은데
( 결국 CellState에서 변경이 일어나면 CellState를 사용하는 곳에서도 변경을 해줘야 하니까 부모인 Cell에서 변경이 일어나면 자식도 변경을 해줘야 한다는 것과 동일하다고 생각했습니다 )
잘못 생각하고 있는 부분일까요..?
Answer 2
1
안녕하세요, 대영 님!
네, 일단 각 Cell이 CellState와는 직접적인 관계를 가지고 있으니 그 자체의 결합도는 높다고 볼 수 있겠습니다.
다만, 여기서는 상속 구조와 조합 구조의 비교가 포인트인데요.
상속 구조에서는 부모의 메서드 시그니처와 그 내용을 자식이 그대로 받게 되어, 부모의 변경이 자식들에게 직접적으로 영향을 미치는 구조이지만, 그에 비해 조합 관계는 CellState의 내부에서 어떤 변경이 일어나더라도 Cell에는 영향을 주지 않을 수 있다는 것입니다.
물론 Cell에서 사용하고 있는 CellState의 메서드 시그니처가 변경되거나, CellState의 이름이 바뀌거나 한다면 말씀하신대로 직접적인 영향을 받겠지만, CellState의 외부 스펙을 유지하면서 내부 구현은 자유롭게 변경할 수 있다, 라는 관점입니다.
도움이 되셨기를 바랍니다.
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다. 대영님!
조합 관계와 상속의 차이를 이해하는 것은 객체지향 설계의 핵심 중 하나입니다. 질문하신 내용을 바탕으로 설명드리겠습니다.
조합과 상속 차이:
상속:
- 상속은 부모 클래스가 가진 속성과 메서드를 자식 클래스가 물려받는 구조입니다.
- 이는 강한 결합을 초래할 수 있으며, 부모 클래스에 변경이 발생했을 때 그것이 모든 자식 클래스에 영향을 미칠 수 있습니다.
- 상속은 부모 클래스가 가진 속성과 메서드를 자식 클래스가 물려받는 구조입니다.
조합(컴포지션):
- 조합은 객체가 포함 관계로 구성되는 방식입니다.
- 객체 간의 결합도를 낮출 수 있으며, 각 객체를 독립적으로 수정할 수 있는 장점이 있습니다.
- 조합은 객체가 포함 관계로 구성되는 방식입니다.
CellState와의 결합도:
사실, 조합을 사용한다고 해서 항상 결합도가 낮아지는 것은 아닙니다. 대신, 조합은 종종 객체 관계를 보다 유연하게 변화시킬 수 있도록 합니다. 예를 들어, CellState를 다양한 구현으로 바꿀 수 있으며, CellState가 인터페이스를 통해 구현되면 더 좋습니다.
대영님이 제기하신 것처럼 결과적으로 변경의 영향을 받는 위치는 비슷할 수 있습니다. 하지만 조합을 통해 각 구성 요소가 더욱 독립적으로 변형될 수 있으며, 테스트나 기능 확장 측면에서 유연성을 제공할 수 있습니다. 이것이 상속보다 조합을 선호하는 이유 중 하나입니다.
관련된 개념과 유사한 토의는 다음과 같은 게시물을 통해 추가 정보를 얻으실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[강의 질문] 메서드 선언부
0
89
1
[강의 질문] 메서드와 추상화
0
60
2
DIP 개념에 대한 질문입니다.
0
64
1
만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민
0
85
2
DIP 설명 후반부에 IOC에 대한 질문 드립니다.
0
78
2
안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!
0
70
1
안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.
1
64
2
자바 record 사용에 대해서 질문 드립니다!
0
127
2
강의 내용 정리 및 자료 제작 툴 문의 드립니다.
0
136
2
사용할 변수 가깝게 선언하기 질문
0
92
1
오버 엔지니어링
0
147
2
학습용 java/spring 오픈소스 추천
1
360
2
중복된 메서드 줄이는 방법
0
182
2
MarketPlace에서 Sonarlint 검색이 안됩니다.
0
413
3
isLandMineCell() 메서드 질문
0
208
1
Cell[][]BOARD 매개변수받기
0
152
2
ConsoleInputHandler에서 왜 final붙여야 하는지
0
192
1
정적 생성자 메서드 of, from
0
264
2
Getter관해서
0
148
3
이름 바꾸기
0
129
2
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
0
162
2
현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.
0
206
2
null을 가질 수 있는 값을 인자로 넘겨야 하는 경우
0
249
3
리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..
0
251
2

