
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
코드
package thirdProject;
public abstract class AbstractOperation {
abstract double operate(int firstNumber, int secondNumber);
}
package thirdProject;
// 더하기 클래스
public class AddOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
package thirdProject;
// 뺴기 클래스
public class SubstractOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber - secondNumber;
}
}
package thirdProject;
// 곱하기 클래스
public class MultiplyOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber * secondNumber;
}
}
package thirdProject;
// 나누기 클래스
public class DivideOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber / secondNumber;
}
}
package thirdProject;
public class Calculator {
private AbstractOperation operation;
public Calculator(AbstractOperation operation) {
this.operation = operation;
}
public void setOperation(AbstractOperation operation) {
this.operation = operation;
}
public double calculate(int firstNumber, int secondNumber) {
double result = 0;
result = operation.operate(firstNumber, secondNumber);
return result;
}
}
package thirdProject;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("첫 번쨰 숫자를 입력하세요>>");
int firstNumber = sc.nextInt();
System.out.print("첫 번쨰 숫자를 입력하세요>>");
int secondNumber = sc.nextInt();
Calculator calAdd = new Calculator(new AddOperation());
System.out.println(firstNumber + " + " + secondNumber + " = " + calAdd.calculate(firstNumber, secondNumber));
Calculator calSub = new Calculator(new SubstractOperation());
System.out.println(firstNumber + " - " + secondNumber + " = " + calSub.calculate(firstNumber, secondNumber));
Calculator calMult = new Calculator(new MultiplyOperation());
System.out.println(firstNumber + " * " + secondNumber + " = " + calMult.calculate(firstNumber, secondNumber));
Calculator calDiv = new Calculator(new DivideOperation());
System.out.println(firstNumber + " / " + secondNumber + " = " + calDiv.calculate(firstNumber, secondNumber));
}
}
==========================================================
질문
Calculator calAdd = new Calculator(new AddOperation());
System.out.println(firstNumber + " + " + secondNumber + " = " + calAdd.calculate(firstNumber, secondNumber));
Main 클래스에서 위와 같이 calAdd.calculate(firstNumber, secondNumber));를 하게 되면
Calculator 클래스에 calculate 메서드로 값이 넘어가는 것 같은데
이때 Calculator 클래스에 calculate 메소드(아래 코드)에 operation.operate(firstNumber, secondNumber);로 계산이 이루어진다고 생각됩니다.
public double calculate(int firstNumber, int secondNumber) {
double result = 0;
result = operation.operate(firstNumber, secondNumber);
return result;
}
이때 operation.operate(firstNumber, secondNumber);가 추상화 클래스인 AbstractOperation로 넘어 가는 방식인지 아니면 각 계산 클래스(AddOperation, SubstractOperation, MultiplyOperation, DivideOperation)에 값이 리턴이 어떻게 되는지 이해가 안됩니다.
