일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 기초쿼리
- oauth
- 자바의정석
- 스프링의정석
- 인프런
- 클린빌드
- 쿼리
- SpringFramework
- MySQL
- 자바기초
- SQL
- 자바연습문제
- RDBMS
- devcamp
- java
- 패캠
- 남궁성
- 패스트캠퍼스
- 불친절한SQL
- 자바
- 스프링
- ApplicationContext
- 오라클
- 소셜로그인
- mariadb
- 국비지원
- 자바문제
- Spring
- cleanbuild
- Oracle
- Today
- Total
Darren's Devlog
스프링의정석 CH02-09. 관심사의 분리와 MVC패턴 - 이론 본문
관심사(concern) = 해야할 작업
위 main()은 입력, 처리, 출력 크게 세가지의 관심사를 가지고 있다.
관심사의 분리는 OOP(객체지향) 5개 설계 원칙 SOLID 중
첫번째에 해당하는 단일책임의 원칙에 해당한다.
SRP -하나의 메서드는 하나의 책임만 지도록 설계하는 것.
객체지향적으로 좋은 코드를 작성하기 위해서는 아래 원칙에 맞춰 코드의 분리를 잘 해주어야한다.
1. 관심사의 분리
2. 자주 변하는 코드와 자주변하지 않는 코드의 분리
3.중복코드의 분리
각 컨트롤러에 입력 부분이 공통적으로 반복되는 것을 확인할 수 있다.
스프링에서 입력하는 부분은 request.getParameter()으로 처리되는데 공동 코드이니
입력을 공통적으로 처리한 후에 컨트롤러로 보내주는 방식으로 관심사의 분리가 가능해진다.
main()에서 입력이라는 관심사가 세 차례 분리된 코드를 확인할 수 있다.
맵핑된 매서드의 매개변수에 선언을 해주는 것으로 관심사를 쉽게 분리할 수 있도록 처리해준다.
1차에서는 request.getParameter()이 생략되었고,
2차에서는 스프링에서 자동형변환을 해주어 형변환이 생략되었다.
main()의 처리와 출력 두 관심사 또한 분리할 수 있다.
처리 부분은 main() 내부에 남겨놓고, 출력 부분을 따로 view로 분리하면 된다.
대신 코드가 분리되어 main() 내부의 변수 값을 참조할 수 없으니,
Model이라는 객체에 값을 담아서 제공해주어야한다.
이런식으로 코드를 분리하는 방식이 바로 기본 MVC 패턴이다.
Controller : 요청에 대한 처리
View : 결과를 출력
Model : Controller에서 처리된 값을 View로 전달
MVC패턴의 흐름을 간단히 나타내면 위 그림와 같다.
스프링에서는 사용자의 요청(request)이 왔을 때 입력 부분을 분리하여 컨트롤러에 제공하고,
처리한 결과(값)를 Model 객체에 담아 View에 제공하고,
View에서는 출력을 응답(response)으로 보내어 MVC 패턴을 구성하고 있다.
이 모든 것을 DispatcherServlet에서 담당한다.
'Spring > 스프링의정석' 카테고리의 다른 글
스프링의정석 CH02-08. 텍스트와 바이너리, MIME, Base64 (0) | 2022.08.09 |
---|---|
스프링의정석 CH02-07 HTTP 요청과 응답 - 이론 (0) | 2022.08.04 |
스프링의정석 CH02-05,06 클라이언트와 서버 & 설정 파일 -server.xml, web.xml (0) | 2022.08.03 |
스프링의정석 CH02-03,04 HTTP 요청과 응답 (0) | 2022.08.01 |
스프링의정석 CH02-01 원격 프로그램의 실행 (0) | 2022.08.01 |