inflearn logo
강의

Course

Instructor

Readable Code: Mindset for Writing Readable Code

Inheritance and Composition

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

164

eoyeong

57 asked

0

 안녕하세요.

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

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

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

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

객체지향 리팩토링 클린코드-기획전

Answer 2

1

wbluke

안녕하세요, 대영 님!

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

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

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

0

eoyeong

답변 감사합니다 😄

0

communityai8509

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

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

조합과 상속 차이:

  1. 상속:

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

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

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