인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김태언님의 프로필 이미지
김태언

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

스프링 데이터 JPA 예제와 트레이드 오프

트레이드오프시 DI, OCP를 지킨다는말

작성

·

42

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
JPA 사용시 중간계층으로 JpaItemRepositovy 를 거쳐서 SpringDataJpaItem의 인터페이스를 구현함으로써 구조가 복잡해지기때문에 중간단계인 JpaItemRepositovy 없이 직접 SpringDataJpaItem를 주입해줌으로써 좀더 간단한 구조가 된다고설명해주셨는데, 단점으로는 DI 와 OCP를 지키지 못한다라고 하셨는데 아래 스크린샷처럼

스크린샷 2024-11-04 오전 8.12.52.png

수업을 듣다가 헷갈려서 찾아봤습니다. DI 와 DIP의 차이를 알아보고 SOLID원칙을 지킨다라는건 DI를 어긴다보단 DIP를 어긴다가 맞는거 같아 이부분에 대한 설명을 DIP를 DI로 추상적으로 설명했다고 이해해야할까요? 정확히는 DIP를 지키기위해 DI를 넣는건데 SpringDataJpaItem를 주입한다고할때 솔직히 이것도 DI로 넣는것도 같고 DIP도 인터페이스(추상화)에 의존하기때문에 지킨거고 오히려 OCP만 어기는 구조가 아닌가해서요

정리하자면

  1. DI를 어긴다는말보단 DIP를 어긴다 라고해야되는게 맞는지

  2. 해당 코드 트레이드오프 설명시 DIP는 지키되 OCP를 지키지 못하는게 아닌지

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

김태언님께서 질문하신 부분에 대해 설명드리겠습니다.

  1. DI를 어긴다는 말보다는 DIP를 어긴다는 표현이 맞는지에 대해서는, DIP(Dependency Inversion Principle)는 실제로 고수준 모듈이 저수준 모듈에 의존하지 않고, 추상화된 인터페이스에 의존하도록 하는 원칙입니다. DI(Dependency Injection)는 이 원칙을 구현하기 위한 방법 중 하나입니다. 강의에서는 이 부분을 보다 쉽게 설명하기 위해 DI 용어를 사용했을 수 있지만, 정확히는 DIP 원칙을 지킬 필요가 있는 부분을 말하는 것 같습니다.

  2. DIP는 지키지만, OCP만 어긴 구조인지에 대해 말씀드리자면, 어댑터(계층)를 삽입하여 DIP를 지키고, 변경의 필요성을 줄이는 것을 목표로 할 수 있습니다. 하지만 어댑터를 생략하고 직접 DI를 하게 된다면 기존 구조를 그대로 변경해야 하는, 즉 OCP(Open/Closed Principle)를 어길 가능성이 높아집니다. 따라서 이런 트레이드오프에서, 두 원칙 간의 균형을 고민하는 것이 중요합니다.

설명을 듣고 이해가 도움이 되셨길 바랍니다. 추가로 궁금한 점이 있으면 언제든지 질문 주세요.

감사합니다!
이미지 출처 및 상세 내용

김태언님의 프로필 이미지
김태언

작성한 질문수

질문하기