step 3까지 결과
package org.tesk;
public class Calculator {
AddOperation addOperation;
SubstractOperation substractOperation;
MultiplyOperation multiplyOperation;
DivideOperation divideOperation;
public double calculate(String operator, int firstNumber, int secondNumber){
double answer = 0;
char char_operator = operator.charAt(0);
//연산 수행
if (char_operator == '+') {
addOperation = new AddOperation(firstNumber, secondNumber);
answer = addOperation.operate();
} else if (char_operator == '-') {
substractOperation = new SubstractOperation(firstNumber, secondNumber);
answer = substractOperation.operate();
} else if (char_operator == '*') {
multiplyOperation = new MultiplyOperation(firstNumber, secondNumber);
answer = multiplyOperation.operate();
} else if (char_operator == '/') {
divideOperation = new DivideOperation(firstNumber, secondNumber);
answer = divideOperation.operate();
} else if (char_operator == '%') {
answer = (double)firstNumber % secondNumber;
}
return answer;
}
}
package org.tesk;
public class AddOperation {
private int firstNumber;
private int secondNumber;
public AddOperation(int firstNumber, int secondNumber){
this.firstNumber = firstNumber;
this.secondNumber = secondNumber;
}
public double operate(){
double answer = 0;
answer = (double)firstNumber + secondNumber;
return answer;
}
}
나머지 SubstractOperation, MultiplyOperation, DivideOperation 연산 클래스들도 동일
"Calculator 클래스와 포함관계를 맺고 생성자를 통해 각각의 연산 클래스 타입의 필드에 객체를 주입합니다" 라는 조건에 이게 부합하는지 고민이 됐다 그래도 일단 위와 같이 구현함!
Calculator 클래스와 포함관계를 맺고 생성자를 통해 각각의 연산 클래스 타입의 필드에 객체를 주입 -> 과제를 풀고 답지를 보니 저 의미가 아니였다!!
Calculator클래스 내부에 필드로 가지고 있는 연산자 클래스들을 생성자 주입을 통해서 넣은 다음에, 연산은 생성자 주입을 통해서 넣은 필드들의 메서드를 통해서 수행하라는 뜻이었다!
피연산자 값은 그냥 메서드로 전달하는 것이었음.,,ㅎㅎ
문제에서 직관적으로 해설해 주셨는데 왜 피연산자 값들을 생성자 주입을 통해서 하라고 이해했는지 😅
앞선 setp이랑 헷갈린 것 같다...
앞으로는 문제를 더 주의깊게 봐야할 것 같다 😳
public class Calculator {
private final AddOperation addOperation;
private final SubstractOperation substractOperation;
private final MultiplyOperation multiplyOperation;
private final DivideOperation divideOperation;
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 firstNumber, int secondNumber) {
double answer = 0;
if(operator.equals("+")){
answer = addOperation.operate(firstNumber, secondNumber);
}else if(operator.equals("-")){
answer = substractOperation.operate(firstNumber, secondNumber);
}else if(operator.equals("*")){
answer = multiplyOperation.operate(firstNumber, secondNumber);
}else if(operator.equals("/")) {
answer = divideOperation.operate(firstNumber, secondNumber);
}
return answer;
}
}
public class AddOperation {
public double operate(int firstNumber, int secondNumber){
return firstNumber + secondNumber;
}
}
step 4까지 결과
package org.tesk;
public class Main {
public static void main(String[] args) {
AddOperation addOperation = new AddOperation();
Calculator calculator = new Calculator(addOperation);
System.out.println(calculator.calculate(2, 3));
}
}
package org.tesk;
public abstract class AbstractOperation {
public abstract double operate(int firstNumber, int secondNumber);
}
package org.tesk;
public class AddOperation extends AbstractOperation{
@Override
public double operate(int firstNumber, int secondNumber) {
return (double)firstNumber + secondNumber;
}
}
package org.tesk;
public class Calculator{
AbstractOperation operation;
public Calculator(AbstractOperation operation){
this.operation = operation;
}
public double calculate(int firstNumber, int secondNumber){
return operation.operate(firstNumber, secondNumber);
}
}
calculate 메서드에서는 더 이상 연산자 타입을 받아 구분할 필요 없이 주입 받은 연산 클래스의 operate 메서드를 통해 바로 연산을 수행
이라고 했기 때문에 main에서 연산자 클래스를 생성해서 Calculator클래스에 생성자 주입을 한 다음 calculate메서드에서 실행하도록 했다! Step4는 답지랑 똑같이 잘 풀었다! ^_^
'JAVA' 카테고리의 다른 글
제네릭을 활용한 Double타입 계산이 가능한 계산기 만들기 (0) | 2025.01.08 |
---|---|
다형성을 이용한 계산기 만들기 - 예외처리 추가 (0) | 2025.01.07 |
자료구조 요리 레시피 메모장 만들기 / Iterator (1) | 2025.01.02 |
Array / List / Stack / Queue / Set / Map (0) | 2025.01.02 |
자바 기본 문법 / 얕은 복사와 깊은 복사 / String (0) | 2025.01.02 |