지금까지 공부하고 프로젝트를 만들면서 Service 클래스만 구현해 사용했는데 Spring을 공부하면서 Service 인터페이스와 ServiceImpl 클래스 (구현체) 구조로 많이 사용하는 걸 알게되었다. 굳이 나눠서 구현하지 않아도 코드에 오류는 없기 때문에 무작정 남들은 그렇게 쓴다 라는 이유만으로 사용하는 것 보다 확실하게 알아보고 목적에 맞게 작성하는게 좋은 것 같아서 왜 인터페이스-구현체 구조로 코드를 짜는지 알아보고 정리를 해보려고 한다. 인터페이스 사용이 권장되는 이유는 개방 폐쇄의 원칙(OCP)에 기반한 전략 패턴을 사용하기 위함이다. 개방 폐쇄의 원칙이란 확장에는 열려있고 변화에는 닫혀있다는 의미인데 이미 만들어진 서비스를 커스터마이징 해본 사람은 쉽게 이해할 수 있다. 예를 들어 컨트..