강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Hika Maeng님의 프로필 이미지
Hika Maeng

작성한 질문수

오브젝트 - 설계 원칙편

7-3. 의존성 역전 원칙 - 추상화와 세부 사항

7-3 모듈의존성 역전에 대해

해결된 질문

작성

·

42

-1

image.png

이걸 정말 실무에서 실현하시는지 궁금해요.
이건 뭐랄까 정말 이론적인 얘기 같아요.

이 예제가 아주 적절한데, 보통 저런 구조의 별도 모듈에 구현되는 하위수준의 기능은 라이브러리이거나 스탠드얼론 생태계를 갖는게 일반적이죠.

이건 실무적으로 보면 잭슨이 우리회사 인터페이스에 따라서 만들어져야한다 라고 말하는 것에 가까운 느낌이랄까,

저는 실무적에서 기능 모듈의 인터페이스가 도메인 모듈에 소속되게 만든 경험이 아예 없는 거 같아요. 소시적에 이론 따라 몇 번 해봤는데 완전 별로였거든요.

답변 2

0

조영호님의 프로필 이미지
조영호
지식공유자

예제의 CallCollector처럼 Reader와 같이 인프라를 추상화한 인터페이스를 이용해서 의존성을 역전 시키는 방법은 애플리케이션 레이어에서 매우 빈번하게 사용됩니다.

도메인 레이어에서도 도메인 서비스 내부에서 외부 인프라에 의존할 경우에는 의존성 역전 원칙을 이용해서 구현과 인터페이스를 분리하는 방법을 자주 사용합니다.

그 외에도 의존성 순환을 제거하거나, 테스트 용이성을 향상시키거나, 재사용성을 높이거나, 유연성을 향상시키기 위해서도 의존성 역전을 자주 사용합니다.

 

 

0

안녕하세요, 인프런 AI 인턴입니다. Hika Maeng님, 질문해 주셔서 감사합니다.

의존성 역전에 관한 질문을 가지고 계셨네요. 이론적으로는 이해가 가지만, 실제로 실무에서 이런 원칙을 적용하는 것이 현실적이지 않거나 효과적이지 않을 수 있다는 점에 의문이 드신 것 같습니다.

의존성 역전 원칙(Dependency Inversion Principle, DIP)은 높은 수준의 모듈이 낮은 수준의 모듈에 의존하지 않도록 하여, 시스템의 유연성을 증가시키는 방법입니다. 이 원칙에서는 일반적으로 인터페이스나 추상 클래스를 사용하여 세부 구현을 추상화합니다.

핵심 포인트 요약:

  1. 실무에서의 DIP 적용: 많은 개발자들이 의존성 역전 원칙을 사용하는 것이 어렵거나 시간이 많이 걸린다고 생각할 수 있습니다. 그러나 이 원칙을 효과적으로 적용하면 코드의 재사용성과 테스트 용이성이 개선됩니다.

  2. 라이브러리와 프레임워크 사용: 실무에서는 보통 외부 라이브러리나 프레임워크를 사용할 때, 그에 의존하는 코드가 강하게 결합되지 않도록 인터페이스를 사용합니다. 즉, 라이브러리나 프레임워크의 인터페이스를 자신의 도메인에 맞게 래핑(wrapper)하여 사용하는 경우가 많습니다.

  3. 실무 적용 예시: 예를 들면, 데이터베이스 접근을 관리하는 DAO(Data Access Object) 패턴은 DIP를 적용한 흔한 사례입니다. 서비스 레이어가 데이터베이스 벤더의 세부 사항에 직접 의존하지 않도록 합니다.

  4. 위험도 관리: 초기에는 DIP를 적용하기가 어려울 수 있으나, 시스템이 복잡해질수록 이러한 구조가 유지보수를 훨씬 쉽게 만듭니다. 특히, 빠르게 변화하는 요구사항에 시스템을 유연하게 대응할 수 있도록 돕습니다.

기존 질문 중에서, 의존성 역전 원칙이나 관련된 아키텍처 설계에 대한 유사한 주제를 다루고 있는 링크를 참고하시면 도움을 받을 수 있을 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hika Maeng님의 프로필 이미지
Hika Maeng

작성한 질문수

질문하기