- SRP(single responsibility principle) : 단일 책임 원칙
코드 변경 시 파급 효과가 적어야 한다.
하나의 클래스는 하나의 책임만 진다.
관심사(기능) 분리
- OCP(open/closed principle) : 개방-폐쇄 원칙
확장에는 열려있으나 변경에는 닫혀 있어야 한다.
소프트웨어 요소를 새롭게 확장해도 사용 영역의 변경은 닫혀 있다.
인터페이스의 구현체를 만들어서 새로운 기능들을 확장해 나간다.
기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계한다.
- LSP(liskov substitution principle) : 리스코프 치환 원칙
단순 컴파일 성공이아닌 인터페이스의 기능적 규약을 맞춰야 한다.
- ISP(interface segreation principle) : 인터페이스 분리 원칙
범용 인터페이스를 기능별로 분리해 인터페이스가 명확해진다. 대체 가능성이 높아진다.
- DIP(dependency inversion principle) : 의존관계 역전 원칙
구체화가 아닌 추상화에 의존한다. -> 구현클래스가 아닌 인터페이스에 의존한다.
역할과 구현을 분리 시 클라이언트는 역할만 알면 된다.
다형성, DI, 스프링 컨테이너를 이용하여 클라이언트 코드 변경 없이 기능 확장이 가능하다. (OCP와 DIP원칙을 따를 수 있게 된다.)
*인터페이스와 구현체로 역할과 구현을 분리하여 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계다. (인터페이스만 봤을 때는 어떤 구현체와 매핑되는지 직관적으로 판단하기 어렵기 때문에 기능을 확장할 가능성이 없다면, 구현체를 직접 사용하는것이 좋을 수 있다. 상황에 따라 잘 판단해서 설계한다.)
Spring MVC
dispatcherServlet : 서블릿의 공통처리가 가능한 부분을 처리해준다.
요청 -> DispatcherServlet(입력) 에서 controller(처리)로 model전달 -> controller에서 model값 설정 -> DispatcherServlet이 view(출력)에 결과 전달 -> 클라이언트에 응답