스프링 데이터 JPA 예제를 다시 한번 돌아보자.
클래스 의존 관계
(규모가 큰 플젝은 이러한 방식 선택)
런타임 객체 의존 관계
중간에서 JpaItemRepositoryV2
가 어댑터 역할을 해준 덕분에 ItemService
가 사용하는 ItemRepository
인터페이스를 그대로 유지할 수 있고 클라이언트인 ItemService
의 코드를 변경하지 않아도 되는 장점이 있다.
고민
ItemService
를 변경하지 않고, ItemRepository
의 구현체를 변경할 수 있는 장점이 있다.
그러니까 DI, OCP 원칙을 지킬 수 있다는 좋은 점이 분명히 있다.
하지만 반대로 구조가 복잡해지면서 어댑터 코드와 실제 코드까지 함께 유지보수 해야 하는 어려움도 발생한다.다른 선택
여기서 완전히 다른 선택을 할 수도 있다.