로그인 샘플 소스를 받았는데
로그인 서비스를 처리하는 클래스를 그냥 만든게 아니라
인터페이스를 상속시켜 구현해놨더라구
그리고 컨트롤러에서 인터페이스를 통해 메소드를 접근하는 형태고.
어차피 로그인 기능은 다른 부분에서 사용되는 것도 아니고 하나만 있으면 되는데
굳이 인터페이스를 정의하고 그걸 상속 시킨 클래스를 만든다음에
컨트롤러에서 구현객체에 바로 접근하지 않고 인터페이스를 통해 접근해야할 이유가 있을까?
소스로 설명하자면
interface LoginService {
public User getUser(String id, String pw);
}
class LoginServiceImpl implements LoginService {
@Override
public User getUser(String id, String pw) {
// DB에서 유저정보 가져옴
}
}
-------------------------------------------------
class LoginController {
@Autowired
private LoginService loginService
@RequestMapping(...)
public ModelAndView login(String id, String pw) {
User user = loginService.getUser(id, pw);
....
}
}
만든 사람에게 물어보는게 젤루 정확한 답변일듯
이건 스프링하고 상관 없는문제잖어.... 암튼 설명 해주자면 인터페이스는 굳이 할필요는 없는데 저런식으로 Controller - Service - DAO로 나누는건 중요한거다. 일련의 루틴을 가정할때 그걸 각 단계(레이어)로 나눠 놓으면 나중에 디버깅하기도 쉽고 로직을 서비스로 몰고 컨트롤러에서 파라미터 처리를 하고 DAO에서 데이터 관리를 하게 되면 어떤 문제가 발생했을때 분리해서 처리할 수 있게 되지
로직을 수정할 일이 있을때 전체를 파고 들 필요없이 서비스만 고치고 파라미터가 바뀌면 컨트롤러만 수정하고 디비가 바뀌면 dao만 고치고 이런게 된다는거지
내 예상으론 소스 복붙해서 이런 결과가 나오지 않았을까... 생각 ㅋ 내 경험이기도 하고... 나도 첨에 잘 모를때 걍 복붙해서 이름만 바꿨거던..
흠.. 어쨋든 이유는 알겠음. 불필요하게 java 파일이 많아보이긴 하겠지만 디버깅 및 관리상 이게 이점이 더 많다 이거구나. 감사
공부하라고 그렇게 한거겠지 그리고 자바의 정석 mvc 모델 개발 패턴이기도 하고