인프런 커뮤니티 질문&답변
DIP 개념에 대한 질문입니다.
작성
·
22
0
DIP라는 개념을 상위수준의 모듈에서 하위수준을 의존해서는 안된다는 정의에 대한 설명에서 질문드립니다.
이때 의존성의 순방향이란, 자바로 따지면 상위 객체에서 하위 객체를 생성하여 활용하는 정도로 이해했습니다. 이떄 저수준의 모듈이 변경된다는게 메소드 단위의 개념인지 객체의 구현체 단위의 개념인지 정확히 모르겠습니다.
메소드라면, 저수준의 모듈이 변경된다는게 사실 메소드 시그니처가 변경되면 문제가 되겠습니다만, 안에 구현이 바뀐다고 해서 상위 모듈에서 하위 모듈의 메소드를 호출할 때 영향이 간다는 생각이 들지 않았습니다.
구현체라면, 런타임 시점에 구현체가 결정되고/ 실행되기 때문에 이를 담는 추상 객체로 코딩된 고수준의 모듈에는 변화가 없다고보면 되는건지요..? 결국 주입되는 구현체의 변경에 유연하다는 정도로 보면될까요?
답변 1
0
안녕하세요, 인생은회전목마 님!
맞습니다. 하위 객체의 구현 내용이 변경되는 것은 어차피 상위 객체에서 알 수 없기 때문에 그것을 이야기하는 것은 아니고요.
상위 객체가 하위 객체를 직접 참조하게 되면, 일단 해당 하위 객체의 이름부터, 패키지(참조 위치), 말씀하신 메서드 시그니처까지 모든 정보를 다 알고 있게 됩니다.
구현체도 하나로 고정되기 때문에, 요구사항에 변경이 생겨 A 구현체가 B 구현체로 변경되어야 하면 A 구현체를 직접 의존하고 있는 모든 상위 객체가 변경이 필요해집니다. 만약 100군데라면 100개의 파일에 변경이 일어나겠죠.
하지만 이미 잘 아시는 것처럼 인터페이스를 활용해 의존 방향을 역전시키면, 상위 객체는 구현체의 기능(스펙)만 알지 실제로 어떤 구현체가 연결되는지는 알 수 없습니다. 애초에 관심을 가질 필요도 없는 것이고요.
도움이 되셨기를 바랍니다.
감사합니다. 🙂





