언어 : JAVA
주제 : [04] 내용 실습
실습 1. 크리스마스까지 몇 달 며칠 남았을까?
설계도 - 클래스 다이어그램
기간을 나타내는 Period 클래스와 LocalDate를 사용한다.
Model : Period countdownXmas()
ViewOut : void showCountdownXmas(Period p)
Controller : void control(Model m, View v)
Calendar(Starter) : static void main(String [] args)
MVC 아키텍처를 사용하지 않았을 때의 코드는 다음과 같다.
import java.time.LocalDate;
import java.time.Period;
public class Calendar {
public static void main(String[] args) {
//Model
LocalDate today = LocalDate.now();
int year = today.getYear();
LocalDate xmas = LocalDate.of(year, 12, 25);
Period p = Period.between(today, xmas);
//View
int months = p.getMonths();
int days = p.getDays();
String message = "크리스마스가지 " + months + "달 " + days + "일 남았다.";
System.out.println(message);
}
}
다음 코드를 MVC 아키텍처로 바꾸면 다음과 같다.
import java.time.LocalDate;
import java.time.Period;
public class Model {
public Period countdownXmas() {
LocalDate today = LocalDate.now();
int year = today.getYear();
LocalDate Xmas = LocalDate.of(year, 12, 25);
Period p = Period.between(today, Xmas);
return p;
}
}
import java.time.Period;
public class ViewOut {
public void showCountdownXmas(Period p) {
int month = p.getMonths();
int days = p.getDays();
String message = "크리스마스까지 " + month + "달 " + days + "일 " + "남았습니다.";
System.out.println(message);
}
}
public class Controller {
public void control(Model m, ViewOut v) {
v.showCountdownXmas(m.countdownXmas());
}
}
public class Calendar {
public static void main(String[] args) {
Controller con = new Controller();
con.control(new Model(), new ViewOut());
}
}
이렇게 코드를 짰을 때, 각 클래스의 역할이 나누어져 있어서 보기에 수월하다. 또한, 에러가 발생했을 때 어떤 파트에 문제가 있는지 쉽게 알 수 있다.
실습 2. 크리스마스까지 몇 달 며칠 남았을까 + 날짜 지정 후 그 날짜까지의 기간 알려주는 기능 추가
Model : Period countdown(LocalDate d), Period countdownXmas()
ViewIn : LocalDate getDate(String message)
ViewOut : Void showCountdown(LocalDtae d, Period p), showCountdwonXmas(Period p)
Controller : Void control(Model m, ViewIn in, ViewOut out)
Calendar : static void main(String [] args)
MVC 아키텍처를 기반으로 짠 코드는 다음과 같다.
import java.time.LocalDate;
import java.time.Period;
public class Model {
public Period countdown(LocalDate d) {
LocalDate today = LocalDate.now();
Period p = Period.between(today, d);
return p;
}
public Period countdownXmas() {
LocalDate today = LocalDate.now();
int year = today.getYear();
LocalDate Xmas = LocalDate.of(year, 12, 25);
Period p = Period.between(today, Xmas);
return p;
}
}
import java.time.LocalDate;
import java.util.Scanner;
public class ViewIn {
public LocalDate getDate(String message) {
try (Scanner scan = new Scanner(System.in)) {
System.out.println(message);
int year = scan.nextInt();
int month = scan.nextInt();
int day = scan.nextInt();
return LocalDate.of(year, month, day);
}
}
}
import java.time.LocalDate;
import java.time.Period;
public class ViewOut {
public void showCountdown(LocalDate today, Period p) {
int year = p.getYears();
int month = p.getMonths();
int days = p.getDays();
String message = "" + today.getYear() + "년 " + today.getMonthValue() + "월 " + today.getDayOfMonth() +"일 까지 " + year + "년 " + month + "달 " + days + "일 남았습니다.";
System.out.println(message);
}
public void showCountdownXmas(Period p) {
int month = p.getMonths();
int days = p.getDays();
String message = "크리스마스까지 " + month + "달 " + days + "일 " + "남았습니다.";
System.out.println(message);
}
}
import java.time.LocalDate;
public class Controller {
public void control(Model m, ViewIn in, ViewOut out) {
out.showCountdown(LocalDate.now(), m.countdown(in.getDate("년 월 일을 입력하세요")));
}
}
public class Calendar {
public static void main(String[] args) {
Controller con = new Controller();
con.control(new Model(), new ViewIn(), new ViewOut());
}
}