작성
·
435
2
안녕하세요
의존성 역전에 대한 수업을 듣다가 갑자기 궁금한 사항이 생겼습니다. 인터페이스 소유권 역전에 대해서 말씀해 주셨는데요.
보통 프로젝트에 들어가 보면 아래와 같은 구조로 패키지를 구성하는데, 그럼 서비스 쪽에 인터페이스도 사용하는쪽인 controller에 위치해야 하는게 아닌가 싶어서요.
제가 이해한게 맞는지 궁금 합니다.
// Before: 전통적인 계층형 구조
com.example.app
├── controller
│ └── ExController.java
├── service
│ ├── ExRateService.java (인터페이스)
│ └── impl
│ └── ExRateServiceImpl.java
└── mapper
└── ExMapper.java
// After: DIP를 적용한 구조
com.example.app
├── controller
│ ├── ExController.java
│ └── ExRateService.java (인터페이스)
├── service
│ └── ExRateServiceImpl.java
└── mapper
└── ExMapper.java
답변 4
6
1
ExRateService.java
인터페이스는 service
패키지에 위치해야 하며, controller
패키지에 위치하는 것은 올바르지 않습니다. 인터페이스는 일반적으로 서비스 패키지나 그 하위 패키지에 위치해야 합니다.ExRateServiceImpl.java
구현 클래스는 service/impl
패키지에 위치해야 하며, 직접 service
패키지에 위치하는 것은 올바르지 않습니다. 구현 클래스와 인터페이스를 분리하여 유지하는 것이 좋습니다.1
0
그럼 레포지토리 계층에 해당하는 DAO는 dao패지키안에서
ExampleDao.java (인터페이스), ExampleDaoImple.java(구현체)로 구성 되어있을 때
ExampleDao.java (인터페이스)는 service패키지로 이동 해야하나요?
의존성 역전 원칙(DIP)을 적용한다면 그렇습니다. 서비스 인터페이스는 이를 사용하는 클라이언트에 가까이 두는 겁니다.