강의

멘토링

로드맵

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

박세웅님의 프로필 이미지
박세웅

작성한 질문수

토비의 스프링 6 - 이해와 원리

Seprate Interface 패턴에 대한 궁금증

작성

·

16

·

수정됨

0

안녕하세요, 좋은 강의 올려주셔서 감사합니다.

Seperate Interface 패턴에 대해 궁금한 점이 있어 질문드립니다.

 

"오브젝트와 의존관계" 세션의 마지막 강의에서, DIP를 적용하기 위해 payment 패키지에 ExRateProvider 인터페이스를 두고, 해당 인터페이스를 exrate 패키지에서 구현한다고 알려주셨습니다. 저도 직접 코드를 따라서 작성해보니 훨씬 깔끔하다는 느낌이 들었는데요.

 

그런데 사실 제가 실무에서 개발을 하면서 저런 구조를 경험해보지 못했습니다. 저는 Spring MVC를 사용하는데, 흔히 사용하는 controller-service-repository 패키지 구조에서 repository 패키지 아래에 인터페이스를 만들어서 그대로 쓰거나(JpaRepository) 필요하면 구현체를 만들어서 쓰는 방식으로 개발을 해왔습니다.

 

그래서 다음 2가지가 궁금한데요.

1) Spring MVC를 사용하는 경우에도 알려주신 Separate Interface 패턴을 적용할 수 있나요? 아니면 프로젝트의 설계 자체가 달라져야 하는 것인가요?

2) 실무에서도 Seperate Interface 패턴을 많이 적용하고 있나요?


스프링을 더 잘 이해하고 코드를 더 잘 작성하고 싶었는데,

강의 들으면서 많이 배우고 있습니다.

 

감사합니다.

답변 2

0

토비님의 프로필 이미지
토비
지식공유자

제가 관찰해본 경험으로는 생각보다 DIP를 잘 쓰지 못하는 경우가 많습니다.

DIP를 단지 인터페이스를 만드는 것으로 오해하는 분들도 많습니다. 이런 경우엔 만들어진 인터페이스를 하위 모듈에 두는데, 리포지토리 인터페이스처럼 구현이 하나 뿐인 경우엔 별로 문제라고 느껴지지 않을 수도 있긴 합니다.

하지만 시스템이 커지고 모듈 구조가 복잡하게 얽히기 시작하면 DIP를 하지 않은 경우는 변경에 취약하고, 코드를 이해하기도 힘들어질 수 있습니다.

그래도 최근엔 DIP를 잘 이해하고 쓰시는 분들이 늘어나고 있는 것 같습니다.

SpringMVC는 최상위 모듈이고 거기서 DIP를 직접 적용할 케이스는 별로 없을 듯합니다.

보통 서비스에서 사용하는 리포지토리나, 외부 API 호출, 또는 다른 기능 모듈에 대한 접근 등에서 DIP가 주요하게 사용됩니다.

0

안녕하세요, 인프런 AI 인턴입니다.
박세웅님, 좋은 질문 감사합니다.

  1. Spring MVC를 사용하는 경우 Separate Interface 패턴을 적용하는 것은 가능합니다. 이 패턴은 주로 의존성 역전 원칙(DIP)을 준수하기 위한 방법으로, 인터페이스와 구현체를 분리하여 코드의 결합도를 낮추고 변경에 유연한 구조를 만들기 위함입니다. 따라서 컨트롤러-서비스-리포지토리 구조에서도 인터페이스를 적절히 분리하여 관리할 수 있습니다. 프로젝트의 설계가 달라져야 한다기보다는, 코드를 구조화하는 방법이 보다 명확해질 수 있는 장점이 있습니다.

  2. 실무에서도 Separate Interface 패턴은 많이 적용되고 있습니다. 특히 대규모 프로젝트나 유지보수가 중요한 프로젝트에서는 의존성 관리가 매우 중요하기 때문에 인터페이스를 통한 의존성 주입을 선호합니다. 이는 구체적인 구현에 의존하지 않고도 다양한 환경에서 유연하게 대응할 수 있게 해주기 때문입니다.

강의를 통해 많은 것을 배우셨다니 기쁘네요. 좋은 코드 작성에 Separate Interface 패턴이 도움이 되셨길 바랍니다. 추가로 학습하실 때 아래 링크도 도움이 될 수 있으니 참고해보시기 바랍니다.

감사합니다.

박세웅님의 프로필 이미지
박세웅

작성한 질문수

질문하기