MVC 디자인 패턴 만들기

✒️ 2025-05-28 12:58 내용 수정


MVC 패턴 만들기

  1. (Control) 입력받은 데이터를 처리할 MVC 클래스 작성
    • 각 메소드가 SOLID의 SRP에 따라 각각 하나의 기능만 담당하고 있다.
    • main() : 입력받은 데이터를 페이지로 전달
    • isValid() : 들어온 값이 유효한지 판단
    • getDate() : 들어온 값으로 요일을 계산
package com.nogroup.test;

import java.io.IOException;
import java.util.Calendar;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class DateTellerMVC {
	@RequestMapping("/getDate")
	
	// 요일을 알려주는 메소드
	public String main(int year, int month, int day, Model model) throws IOException {
		if(!isValid(year, month, day)) {
			return "dateError"; // 에러 발생 시 연결될 페이지
		}
		
		char date = getDate(year, month, day);
		model.addAttribute("year", year);
		model.addAttribute("month", month);
		model.addAttribute("day", day);
		model.addAttribute("date", date);
		
		// WEB-INF/views/date.jsp
		return "date";
	}
	
	// 들어온 값을 확인하는 메소드
	private boolean isValid(int year, int month, int day) {
		if(year == -1 || month == -1 || day == -1) return false; // 잘못된 날짜 값
		return ((1 <= month && month <= 12) && (1 <= day && day <= 31));
	}
	
	// 작업 처리를 메소드로 실행
	private char getDate(int year, int month, int day) {
		Calendar cal = Calendar.getInstance();
		cal.set(year, month - 1, day);
		
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		char date = " 일월화수목금토".charAt(dayOfWeek);
		
		return date;
	}
}
  1. (View) 입력받은 값을 보여줄 JSP 페이지를 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DateTellerMVC</title>
</head>
<body>
	<h1>${year}년 ${month}월 ${day}일은 ${date}요일 입니다.</h1>
</body>
</html>
  1. (View) 에러가 발생했을 때 보여줄 JSP 페이지를 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DateErrorMVC</title>
</head>
<body>
	<h1>잘못된 요청입니다. 다시 요청해주세요.</h1>
	<h1>year, month, day를 모두 올바른 값으로 입력하셔야 합니다.</h1>
	<a href="getDate">뒤로 돌아가기</a> <!-- 임시로 넣어둔 부분 -->
</body>
</html>