inflearn logo
강의

Course

Instructor

Toby's Spring 6 - Understanding and Principles

Seprate Interface 패턴에 대한 궁금증

Resolved

46

ert42636698

1 asked

0

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

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

 

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

 

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

 

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

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

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


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

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

 

감사합니다.

java spring

Answer 2

1

tobyilee

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

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

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

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

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

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

0

communityai8509

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

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

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

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

감사합니다.

수업을 잘 듣고 있습니다.

0

103

2

jackson(3.0.2 버전) ObjectMapper.readValue 에러타입

0

109

2

템플릿과 콜백의 역할 경계를 구분하는 기준

0

100

1

테스트를 작성하지않아도 되는 경우

0

86

2

오브젝트 정의 중 배열에 대해서

0

63

2

스프링 레거시를 이용하는 회사에서 일을 하게 될것같은데

0

110

2

JpaTransactionManager에 대해 궁금합니다.

0

81

2

스프링빈과 Clock 클래스 관련

0

44

2

테스트의 기준을 어떤식으로 설정하는 것이 바람직한 테스트일까요 ?

0

51

2

오브젝트와 인스턴스

0

38

1

WebApiExRateProvider 템플릿 콜백 패턴을 적용하면서 테스트 코드를 만들어보았습니다.

0

64

2

템플릿 콜백 패턴 관련하여 궁금한 것이 있습니다!

0

60

2

상태 변경 API 질문

0

122

2

빈에 대한 질문

0

97

1

안녕하세요.

0

145

2

Payment 엔티티에 exRateProvider 주입

0

101

1

@Transactional private 사용유무

0

157

1

JdbcClient 생성 질문

0

190

2

안녕하세요 PaymentConfig 질문드립니다.

0

111

2

[공유] 윈도우 사용자를 위한 http 명령어 오류 해결 방법

0

246

2

생성자 파라미터성자 파라미터

0

239

2

토비님 ! BigDecimal 관련 링크를 못찾겠어요

2

346

2

인터페이스 사용에 관하여 질문드립니다.

0

309

3

Order에서 JPA 메타데이터 분리 - XML 사용

0

260

2