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