JAVA
계산기 작성 코드
- calculator + calculatorApp
package Calculator;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Calculator {
private int firstNumber;
private int secondNumber;
private AbstractOperation operation;
public Calculator(AbstractOperation operation) {
this.operation = operation;
}
public void setOperation(AbstractOperation operation) {
this.operation = operation;
}
public void setFirstNumber(int firstNumber) {
this.firstNumber = firstNumber;
}
public void setSecondNumber(int secondNumber) {
this.secondNumber = secondNumber;
}
public double calculate() {
double answer = 0;
answer = operation.operate(this.firstNumber, this.secondNumber);
return answer;
}
}
private final Calculator calculator = new Calculator(new AddOperation());
public Parser parseOperator(String operationInput) throws Exception{
if(!Pattern.matches(OPERATION_REG, operationInput)){
throw new BadInputException("연산자");
}
AbstractOperation operation;
switch (operationInput){
case "+":
operation = new AddOperation();
break;
case "-":
operation = new SubOperation();
break;
case "*":
operation = new MultiOperation();
break;
case "/":
operation = new DIvOperation();
break;
default:
throw new BadInputException("잘못된 연산자입니다.");
}
this.calculator.setOperation(operation);
return this;
}
public double executeCalculator() {
return calculator.calculate();
}
}
문제점
- Calculator Class 속 생성자 두개를 생성된 것을 확인할 수 있음
- 이때 public Calculator() { } 기본 생성자를 이용해서 Parser 코드 속에 인스턴스화를 진행하면 정상적으로 setOperation 메서드가 실행되는 것을 알 수 있다.
- 하지만, 추상 클래스를 매개로 받는 생성자를 사용할 경우, 과연 코드를 어떻게 변경하고 둘 다 사용을 할 수 있는지 고민해 봄
시도 + 해결
- private final Calculator calculator = new Calculator(new AddOperation()); 이 처럼 필드 영역에 Calculator Class를 객체화 시키고 추상 클래스 선언에 어떤 것을 선언해야 할지 막힘
- 이때 추상 클래스를 매개변수를 받는다면 추상 클래스의 하위 클래스 중에 찾아볼 수 있다는 것을 깨닳음
- 그렇게 하위 클래스 중 AddOperation()을 선언해 줌으로써 동작 가능해짐
알게된 점
- 생성자에 추상 클래스로 매개 변수를 지정하고 생성자를 생성할 경우 기본 생성자로 생성할 때와 달리 매번 setOperation 메서드 호출을 줄일 수 있다는 것을 알았다.
- 또한, 기본 생성자와 달리 AbstractOperation operation; 속 operation을 통해 하위 클래스를 선언해주는 방식으로 사칙연산 클래스를 불러들인다.
- 자바 static 메서드 스프링 부트 static 메서드