오늘 과제를 하던중 구현사항에 Service를 interface로 바꾼후 ServiceImpl에 정의하라는 내용이 있었다. 처음 봤을때는 왜 굳이 이런식으로 구조를 짜야하지 라는 의문이 들었다. 그래서 그 이유를 한번 찾아보았다.
이론상으로 인터페이스와 구현체가 나눠져있으면 구현체는 외부로부터 독립된다. 이로 인해 구현체의 수정이나 확장이 자유로워지고, 이를 사용하는 클라이언트의 코드에는 영향을 주지 않는다. 예를 들어, 사용자의 동작을 정의하는 서비스가 존재할 때 관리자와 일반 사용자의 경우와 같이 사용자의 권한에 따라 동작이 다른 경우가 있다. 이 경우에는 구현체만 추가하면 추가적인 코드 수정 없이 손쉽게 동작을 추가할 수 있다.
개인적인 생각으로는 서비스가 기능이 너무 많아서 확장이 되는경우가 아닌 이상 굳이 분리를 해야될 필요가 있을까 싶다. 물론 기능이 많아지는 프로젝트에서는 확장성을 위해 만드는게 필요할 것 같다.