최근에 스프링을 배우기 시작했는데 특이하게 controller-service-dao-mapper(sql작성하는곳) 대충 이런식으로 연결되있어서 신기하다 하면서 보고있었는데 뇌빼고 만들다 보니까 service구조가 interface를 만들고 impl로 구현하는 구조인것이다
왜 이렇게 만들었지하고 궁금해서 구글링을 좀 했는데 DI과 관련돼서 여러가지가 떴다 덕분에 DI에대해서 조금 알게되었지만 근본적인 궁금증은 해결해주지 못했다
그러다가 한번더 구글하다가 현재 글제목과 같은 글을 보게되었고 나만 이런 의문점을 가지는게 아니란것을 깨달았고
이제부터 설명해보겠다
분리하는 이유
1. 코드 유연성과 확장성이 증가, 유지보수성이 향상
2. 의존성주입을 스프링이 관리하도록만들어서 IoC를 구현할수있다
3. 옛날부터 그렇게 만들었다
불만?이 있는 이유
1. 단순한 기능의 경우 위 구조로 만들면 복잡하기만 하다
2. 인터페이스와 impl의 구현체를 모두 생성해야해서 테스트코드 작성이 어렵다
결론
배운지 얼마 안돼서 잘 모르지만 대부분의 경우 인터페이스와 impl이 1:1로 존재한다고한다
그래서 굳이 분리해서 만든 느낌이 들고 실제로도 장점이 줄어든 효과가 보이기도 한다
그렇다고 무조건 인터페이스를 없애서 만들지는 말자, 향후에 추가적으로 기능이 생기거나 할경우 인터페이스가 필요하니까 본인이 어떤 목적을 두고 프로그램을 만드는지에 따라 알맞게 활용하면 될것같다.
뭔가 이렇게 프로그래밍에 대해 파면팔수록 여러가지 방안들이 나오는데 결국 결론은 알잘딱의 영역인것같은건 기분탓일까
https://github.com/cheese10yun/blog-sample/blob/master/service/README.md
blog-sample/service/README.md at master · cheese10yun/blog-sample
:octocat: Yun Blog sample code. Contribute to cheese10yun/blog-sample development by creating an account on GitHub.
github.com