TIL
[TIL] 240426 <자바> 계산기 만들기
- -
계산기 만들기
Step1.
더하기,빼기,나누기,곱하기,나머지 연산 수행하는 Calculator 클래스 생성
Calculator.java
package week03.homework3;
public class Calculator {
public double calculate (String operator, int num1, int num2) {
double result = 0;
switch (operator) {
case "+" :
result = num1 + num2;
break;
case "-" :
result = num1 - num2;
break;
case "*" :
result = num1 * num2;
break;
case "/" :
result = num1 / num2;
break;
case "%" :
result = num1 % num2;
break;
}
return result;
}
}
Step2.
AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를 만든 후 클래스 간의 관계를 고려하여 Calculator 클래스와 관계를 맺습니다. (→ 포함관계!!!)
- Calculator 클래스와 포함관계를 맺고 생성자를 통해 각각의 연산 클래스 타입의 필드에 객체를 주입합니다.
- calculate 메서드에서 직접 연산을 하지 않고 주입받은 연산 클래스들의 operate 메서드를 사용하여 연산을 진행합니다.
Calculator.java
package week03.homework3;
public class Calculator {
// Calculator클래스는 AddOperation,SubstractOperation,MultiplyOperation,DivideOperation클래스를 포함함.
private final AddOperation addOperation;
private final SubstractOperation substractOperation;
private final MultiplyOperation multiplyOperation;
private final DivideOperation divideOperation;
// Calculator 생성자
public Calculator(AddOperation addOperation,
SubstractOperation substractOperation,
MultiplyOperation multiplyOperation,
DivideOperation divideOperation){
this.addOperation = addOperation;
this.substractOperation = substractOperation;
this.multiplyOperation = multiplyOperation;
this.divideOperation = divideOperation;
}
public double calculate (String operator, int num1, int num2) {
double result = 0;
switch (operator) {
case "+" :
result = addOperation.operate (num1,num2);
break;
case "-" :
result = substractOperation.operate (num1,num2);
break;
case "*" :
result = multiplyOperation.operate (num1,num2);
break;
case "/" :
result = divideOperation.operate (num1,num2);
break;
case "%" :
result = num1 % num2;
break;
}
return result;
}
}
Main.java
package week03.homework3;
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator(new AddOperation(), new SubstractOperation(),
new MultiplyOperation(), new DivideOperation());
System.out.println(calculator.calculate("+", 10, 25));
System.out.println(calculator.calculate("-", 40, 25));
System.out.println(calculator.calculate("*", 20, 10));
System.out.println(calculator.calculate("/", 10, 5));
}
}
Step3.
AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들을 AbstractOperation(추상 클래스)를 사용하여 추상화하고 Calculator 클래스의 내부 코드를 변경합니다.
AbstractOperation.java
package week03.homework3;
// 추상 클래스
public abstract class AbstractOperation {
// 추상 메서드 : 블록{}이 없음 (내용X)
public abstract double operate (int num1, int num2);
// 상속받은 클래스(Add,Abstract,Multiply,DivideOperation)
// 에서 추상 클래스의 추상 메서드(operate)는 반드시 오버라이딩되어야함!
}
Calculator.java
- 생성자 혹은 Setter를 사용하여 연산을 수행할 연산 클래스의 객체를 AbstractOperation 클래스 타입의 필드에 주입합니다.(다형성)
- calculate 메서드에서는 더 이상 연산자 타입을 받아 구분할 필요 없이 주입 받은 연산 클래스의 operate 메서드를 통해 바로 연산을 수행합니다.
package week03.homework3;
public class Calculator {
// AddOperation,SubstractOperation,MultiplyOperation,DivideOperation클래스들은
// AbstractOperation 추상클래스를 상속함!
//Calculator클래스는 4개의 연산클래스들이 상속받고있는 AbstractOperation 클래스만 포함!!!
private AbstractOperation operation;
// Calculator 생성자
public Calculator(AbstractOperation operation){
this.operation = operation;
}
// setter
public void setOperation(AbstractOperation operation){
this.operation = operation;
}
//더 이상 연산자 타입을 받아 구분할 필요가 없어짐
public double calculate (int num1, int num2) {
double result = 0;
result = operation.operate(num1,num2);
return result;
}
}
Main.java
package week03.homework3;
public class Main {
public static void main(String[] args) {
//Calculator.java에서 연산자타입 구별하지 않고
//"주입받은 연산클래스"의 operate메서드를 통해 바로 연산수행
//연산을 수행할 연산 클래스의 객체를 AbstractOperation 클래스 타입의 필드에 주입
// : 다형성
Calculator calculator1 = new Calculator(new AddOperation());
Calculator calculator2 = new Calculator(new MultiplyOperation());
System.out.println(calculator1.calculate(10, 25)); //덧셈
System.out.println(calculator2.calculate(10, 25)); //곱셈
}
}
'TIL' 카테고리의 다른 글
[TIL] 240429 <자바> 계산기 예외 처리 (0) | 2024.04.29 |
---|---|
[TIL] 240428 <자바> 예외처리 (0) | 2024.04.29 |
[TIL] 240425 <자바> 상속,인터페이스 (1) | 2024.04.25 |
[TIL] 240424 <자바> 클래스 (0) | 2024.04.24 |
[TIL] 240423 <자바> 연산자,조건문,반복문,배열,컬렉션 (0) | 2024.04.23 |
Contents
소중한 공감 감사합니다