inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

오브젝트 - 설계 원칙편

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

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

해결된 질문

68

Hika Maeng

작성한 질문수 20

0

image.png

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

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

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

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

객체지향 소프트웨어-테스트 소프트웨어-설계

답변 2

0

조영호

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

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

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

 

 

0

인프런 AI 인턴

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

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

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

핵심 포인트 요약:

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

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

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

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

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

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

레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?

1

48

2

tryMove(..) 메서드 ArrayIndexOutOfBoundsException 제보

1

67

2

5-4 Sealed Interface는 주로 모든 케이스 검증이 필요할 때 사용하나요?

1

465

1

Game, Player, Room간의 관계에 대한 질문을 드려요

1

109

2

6-2 보호 로직 중복 이슈

1

110

2

3-2 메서드를 얼마나 작게 나누는게 적절한가요?

1

134

3

4-2 값 객체 질문

1

97

2

7-3 Reader의 소유권 이동에 관해

1

60

2

디자인 패턴에 대해선 어떤 생각을 가지고 계신지 궁금합니다.

2

115

1

8-5 책임 분리를 통한 중복 코드 제거 과정에서 특정 조합은 불가능할 때

2

495

2

인스턴스 증가에 대한 우려

2

132

2

6-2. 명령과 쿼리 분리 원칙 질문

2

493

2

9-1 사소한 강의자료 오류

1

86

2

7-3 상속을 이용한 중복 제거 질문 있습니다!

3

1156

1

함수형 스타일에 대해선 어떻게 생각하시나요?

1

108

2

값 객체 활용에 대해

1

140

2

실례지만 여기에 후기 올립니다.

2

556

3

동일성과 동등성 설명이 바뀐 것 같습니다.

1

119

2

인터페이스명이 변경된 걸까요??

0

92

2

player 내부에 worldmap

3

149

2

9-6 순환참조인거 같은데..

0

116

2

8-5 오타

0

67

2

7-5 자막오타

0

60

2

7-5 자막오타

0

60

2