관심사의 분리 Speration of Concerns
OOP 5대 설계 원칙 중 하나인 SRP(단일 책임의 원칙): "하나의 메서드는 하나의 책임(concern)"
아래의 코드는 SRP 원칙에서 보면 좋은 코드가 아니므로 객체지향적인 설계를 위해서 코드를 분리해줘야 한다.
객체지향적인 코드를 작성하기 위해서 3가지 원칙을 잘 지켜 코드의 분리를 하여야 함.
코드의 분리
1. concern 분리
2.Common code(변하는 것 )/ uncommon code(자주 변하지 않는 것)의 분리
3. 공통(중복) 코드의 분리
공통 코드의 분리 -입력의 분리
출력(view)의 분리
스프링 MVC 구조
DispatcherServlet이 앞에서 입력을 처리, Model(결과를 저장할 객체)를 생성한 다음 객체를 Controller에 넘겨주면 Controller가 객체를 받아 결과를 저장하고 Model에 다시 주면 그걸 View한테 전달해 준다.
View에서는 작업한 결과를 가지고 최종 응답을 만들어서 클라이언트에게 보낸다.
<MVC>
1. 입력받을 값들을 매개변수로 선언
2. Model을 선언해서 작업을 처리
3. Model에 작업 결과를 저장
4. 이 작업 결과를 보여줄 View 변환
5. DispatcherServlet이 작성 결과가 저장되어 있는 Model을 View에 전달
6. View는 데이터가 담겨있는 Model 객체에서 값을 읽을 수 있다
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTellerMVC { //http://localhost/ch2/getYoilMVC?year=2023&month=5&day=15
@RequestMapping("/getYoilMVC")
// public void main(HttpServletRequest request, HttpServletResponse response) throws IOException {
public ModelAndView main(int year,int month,int day) throws IOException {
//1.모델뷰 생성하여 기본 뷰 지정 // 잘 사용하지 않음. 보통 매개변수로 줌.
ModelAndView mv= new ModelAndView();
//1.유효성 검사
// if(!isValid(year,month,day))
// return "yoilError";
//2. 요일 계산
char yoil=getYoil(year, month, day);
//3. 계산한 결과를 model에 저장
mv.addObject("year",year);
mv.addObject("month",month);
mv.addObject("day",day);
mv.addObject("yoil",yoil);
//4.결과를 보여줄 뷰를 저장
mv.setViewName("yoil");
return mv;
//3. 출력
// return "yoil"; //web-inf/views/yoil.jsp 반환
}
private boolean isValid(int year, int month, int day) {
return true;
}
private char getYoil(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); //1:일요일 2:월요일 ....
return " 일월화수목금토".charAt(dayOfWeek);
}
}
'PROGRAMMING > SPRING' 카테고리의 다른 글
[06] Exception Handling (0) | 2023.05.24 |
---|---|
[05] Session (0) | 2023.05.22 |
[04] Cookie (1) | 2023.05.20 |
[02] HTTP & protocol (0) | 2023.05.16 |
[01] HTTP 요청과 응답 & 클라이언트와 서버 (1) | 2023.05.16 |