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

WooNG님의 프로필 이미지
WooNG

작성한 질문수

스프링 핵심 원리 - 기본편

좋은 객체 지향 설계의 5가지 원칙(SOLID)

Service 구현체와 DIP

작성

·

303

1

DIP를 지키려면 클라이언트는 구현 클래스가 아닌 인터페이스에 의존해야 하는 것으로 알고 있습니다.

 

때문에 프로젝트에서 컨트롤러는 구현체가 아닌 인터페이스를 호출해서 인터페이스의 기능을 사용하고

서비스 레이어에서 구현 객체를 만드는 식으로 프로젝트를 진행했습니다.

 

프로젝트를 얼추 마무리하고 리뷰하는 과정에서 인터페이스에 대해 재고하게 되었고

이 과정에서 '기능의 확장 가능성이 없는 메서드까지 추상화를 해야 하나?' 라는 의문이 들었습니다.

 

인터페이스는 자바의 다형성을 살려 기능의 확장의 필요한 순간 새로운 구현체로

기능을 확장하는데 의의가 있다고 생각하는데 기능의 확장이 필요하지 않을 때는

인터페이스로 굳이 추상화 과정이 필요없다는 생각이 들었습니다.

 

근데 이렇게 프로그램을 리팩토링하게되면 DIP가 깨진다는 생각이 들었습니다.

결국 추상화를 하지 않는다는 것은 컨트롤러에서 직접 구현 클래스를 가져온다는 것인데

이건 인터페이스를 의존하는 것이 아니기 때문입니다.

 

때문에 추상화가 필요없으면 구태여 하지 않는 방향이 좋은 것인지

DIP를 깨지 않기 위해 의미없는 추상화라도 필요한 것인지

궁금합니다.

답변 1

0

안녕하세요. WooNG님, 공식 서포터즈 David입니다.

이 부분은 실용의 관점에서 선택해야 합니다.

구현에 대한 변경이 없을 가능성이 매우 높다면 반드시 인터페이스를 분리할 필요 없습니다.

감사합니다.

WooNG님의 프로필 이미지
WooNG

작성한 질문수

질문하기