inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

DIP: Dependency Inversion Principle

DIP 개념에 대한 질문입니다.

64

인생은회전목마

작성한 질문수 18

0

DIP라는 개념을 상위수준의 모듈에서 하위수준을 의존해서는 안된다는 정의에 대한 설명에서 질문드립니다.

 

이때 의존성의 순방향이란, 자바로 따지면 상위 객체에서 하위 객체를 생성하여 활용하는 정도로 이해했습니다. 이떄 저수준의 모듈이 변경된다는게 메소드 단위의 개념인지 객체의 구현체 단위의 개념인지 정확히 모르겠습니다.

메소드라면, 저수준의 모듈이 변경된다는게 사실 메소드 시그니처가 변경되면 문제가 되겠습니다만, 안에 구현이 바뀐다고 해서 상위 모듈에서 하위 모듈의 메소드를 호출할 때 영향이 간다는 생각이 들지 않았습니다.

구현체라면, 런타임 시점에 구현체가 결정되고/ 실행되기 때문에 이를 담는 추상 객체로 코딩된 고수준의 모듈에는 변화가 없다고보면 되는건지요..? 결국 주입되는 구현체의 변경에 유연하다는 정도로 보면될까요?

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

답변 1

0

박우빈

안녕하세요, 인생은회전목마 님!

맞습니다. 하위 객체의 구현 내용이 변경되는 것은 어차피 상위 객체에서 알 수 없기 때문에 그것을 이야기하는 것은 아니고요.
상위 객체가 하위 객체를 직접 참조하게 되면, 일단 해당 하위 객체의 이름부터, 패키지(참조 위치), 말씀하신 메서드 시그니처까지 모든 정보를 다 알고 있게 됩니다.
구현체도 하나로 고정되기 때문에, 요구사항에 변경이 생겨 A 구현체가 B 구현체로 변경되어야 하면 A 구현체를 직접 의존하고 있는 모든 상위 객체가 변경이 필요해집니다. 만약 100군데라면 100개의 파일에 변경이 일어나겠죠.
하지만 이미 잘 아시는 것처럼 인터페이스를 활용해 의존 방향을 역전시키면, 상위 객체는 구현체의 기능(스펙)만 알지 실제로 어떤 구현체가 연결되는지는 알 수 없습니다. 애초에 관심을 가질 필요도 없는 것이고요.

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

 

[강의 질문] 메서드 선언부

0

90

1

[강의 질문] 메서드와 추상화

0

61

2

만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민

0

86

2

DIP 설명 후반부에 IOC에 대한 질문 드립니다.

0

79

2

안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!

0

71

1

안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.

1

64

2

자바 record 사용에 대해서 질문 드립니다!

0

128

2

강의 내용 정리 및 자료 제작 툴 문의 드립니다.

0

136

2

사용할 변수 가깝게 선언하기 질문

0

93

1

오버 엔지니어링

0

149

2

학습용 java/spring 오픈소스 추천

1

367

2

중복된 메서드 줄이는 방법

0

184

2

MarketPlace에서 Sonarlint 검색이 안됩니다.

0

417

3

isLandMineCell() 메서드 질문

0

209

1

Cell[][]BOARD 매개변수받기

0

153

2

ConsoleInputHandler에서 왜 final붙여야 하는지

0

193

1

정적 생성자 메서드 of, from

0

264

2

Getter관해서

0

148

3

이름 바꾸기

0

129

2

stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??

0

164

2

현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.

0

208

2

null을 가질 수 있는 값을 인자로 넘겨야 하는 경우

0

251

3

리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..

0

254

2

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

0

166

2