내용

글번호 632
작성자 heojk
작성일 2017-04-21 12:48:08
제목 MVC 패턴을 적용한 계산기 애플리케이션
내용 MVC 패턴을 적용한 계산기 애플리케이션 - MVC 패턴 적용 - 의존성 주입을 통한 컨틀로러와 서비스 분리 임무 : 두 수를 입력 받아 계산한 결과를 출력하는 애플리케이션을 작성해야 합니다. - 입력 받은 두 수는 모두 정수입니다. - 결과값은 소수점이하 2자리까지만 표시하는 부동소수점입니다. - MVC 패턴을 이용하여 구현해야 합니다. 순서 1. 두 수와 결과값을 저장할 클래스를 정의 2. 기능을 정의 – 글로 정리 3. 인터페이스 정의 4. 기능을 구현하기 위한 시나리오 작성 – 글로 정리 5. 시나리오에 따른 입출력 화면 정의 – 클래스다이어그램 6. 입출력 화면 구현/테스트 7. 인터페이스 구현(biz() 구현)/테스트 8. 컨트롤러 구현 9. 메인에서 의존성 주입 1. 두 수와 결과값을 저장할 클래스를 정의 NumberVO.java
package kr.co.kosa.calculator.model;

public class NumberVO {
	private int num1;
	private int num2;
	private double result;
	
	public NumberVO(int num1, int num2) {
		super();
		this.num1 = num1;
		this.num2 = num2;
	}

	public int getNum1() {
		return num1;
	}

	public void setNum1(int num1) {
		this.num1 = num1;
	}

	public int getNum2() {
		return num2;
	}

	public void setNum2(int num2) {
		this.num2 = num2;
	}

	public double getResult() {
		return result;
	}

	public void setResult(double result) {
		this.result = result;
	}

	@Override
	public String toString() {
		return "NumberVO [num1=" + num1 + ", num2=" + num2 + ", result=" + result + "]";
	}
	
}
2. 기능을 정의 – 글로 정리 계산기능 + 두 수를 더하는 기능, 결과는 소수점이하 두자리까지 - 첫 번째 수에서 두 번째 수를 빼는 기능 * 두 수를 곱하는 기능 / 첫 번째 수를 두 번째 수로 나누는 기능 3. 인터페이스 정의 ICalcService.java
package kr.co.kosa.calculator.service;

import kr.co.kosa.calculator.model.NumberVO;

public interface ICalcService {
	NumberVO add(NumberVO number);
	NumberVO sub(NumberVO number);
	NumberVO mul(NumberVO number);
	NumberVO div(NumberVO number);
}
4. 기능을 구현하기 위한 시나리오 작성 – 글로 정리 덧셈 시나리오 사용자는 입력화면에서 두 수를 입력하고 엔터를 입력한다. 시스템은 두 수를 입력 받아 두 수를 더한 결과를 계산한다. 시스템은 계산한 결과를 출력화면에 출력한다.소수점 이하 두 자리까지만 출력한다.) 5. 시나리오에 따른 입출력 화면 정의 – 클래스다이어그램 6. 입출력 화면 구현/테스트 CalcView.java
package kr.co.kosa.calculator.view;

import java.util.Scanner;

import kr.co.kosa.calculator.model.NumberVO;

public class CalcView {
	Scanner scan = new Scanner(System.in);
	
	public String inputNumber(NumberVO number) {
		System.out.println("두 수와 연산자를 입력하세요.(ex: 7 8 +)");
		int num1 = scan.nextInt();
		int num2 = scan.nextInt();
		String op = scan.nextLine().trim();
		number.setNum1(num1);
		number.setNum2(num2);
		return op;
	}
	
	public void printResult(NumberVO number, String op) {
		System.out.printf("두 수 %d와 %d의 ", number.getNum1(), number.getNum2());
		switch(op.charAt(0)) {
		case '+':
			System.out.print("덧셈");
			break;
		case '-':
			System.out.print("뺄셈");
			break;
		case 'x':
			System.out.print("곱셈");
			break;
		case '/':
			System.out.print("나눗셈");
			break;
		}
		System.out.printf("결과는 %.2f입니다.\n", number.getResult());
	}
}
TestView.java
package kr.co.kosa.calculator.test;

import kr.co.kosa.calculator.model.NumberVO;
import kr.co.kosa.calculator.view.CalcView;

public class TestView {

	public static void main(String[] args) {
		CalcView view = new CalcView();
		NumberVO number = new NumberVO(0,0);
		String op = view.inputNumber(number);
		System.out.println(number);
		System.out.println(op);
		
		// 100과 200을 더하면 300이 됩니다.
		number.setResult(300);
		view.printResult(number, "+");

	}

}
7. 인터페이스 구현(biz() 구현)/테스트 CalcService.java
package kr.co.kosa.calculator.service;

import kr.co.kosa.calculator.model.NumberVO;

public class CalcService implements ICalcService {

	@Override
	public NumberVO add(NumberVO number) {
		double result = number.getNum1() + number.getNum2();
		number.setResult(result);
		return number;
	}

	@Override
	public NumberVO sub(NumberVO number) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public NumberVO mul(NumberVO number) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public NumberVO div(NumberVO number) {
		// TODO Auto-generated method stub
		return null;
	}
}
TestService.java
package kr.co.kosa.calculator.test;

import kr.co.kosa.calculator.model.NumberVO;
import kr.co.kosa.calculator.service.CalcService;

public class TestService {
	public static void main(String[] args) {
		CalcService service = new CalcService();
		NumberVO number = new NumberVO(100, 200);
		System.out.println(service.add(number));
	}
}
8. 컨트롤러 구현 CalcController.java
package kr.co.kosa.calculator.controller;

import kr.co.kosa.calculator.model.NumberVO;
import kr.co.kosa.calculator.service.ICalcService;
import kr.co.kosa.calculator.view.CalcView;

public class CalcController {
	ICalcService service;
	public CalcController(ICalcService service) {
		this.service = service;
	}
	public void launchApplication() {
		CalcView view = new CalcView();
		while(true) {
			NumberVO  number = new NumberVO(0, 0);
			String op = view.inputNumber(number);
			switch(op.charAt(0)) {
			case '+' :
				number = service.add(number);
				break;
			case '-' :
				number = service.sub(number);
				break;
			case 'x' :
				number = service.mul(number);
				break;
			case '/' :
				number = service.div(number);
				break;
			}
			view.printResult(number, op);
		}
	}
}
9. 메인에서 의존성 주입 CalcMain.java
package kr.co.kosa.calculator;

import kr.co.kosa.calculator.controller.CalcController;
import kr.co.kosa.calculator.service.CalcService;
import kr.co.kosa.calculator.service.ICalcService;

public class CalcMain {

	public static void main(String[] args) {
		ICalcService service = new CalcService();
		CalcController controller = new CalcController(service);
		controller.launchApplication();
	}
}