대학수업/프로그램설계방법론

[05] 프로그램 설계 방법론(클래스와 메소드)

MIRIP 2022. 9. 16. 12:28
반응형

언어 : 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());
	}
}

 

728x90
반응형