본문 바로가기
스터디일지/JAVA

[2023.08.17] 자바 3주차 과제 - 계산기 만들기

by 똥쟁이핑크 2023. 8. 17.

1. Main 클래스와 Calculrator 클래스 만들기

  • Calculator에 어떤 연산자를 쓸지와 2개의 정수를 입력 받게 구현 하였다. 이렇게 첫번째 구현방법은 쉬웠다.
// Main.java - 실행 되는 코드
package Calculator;

public class Main {
    public static void main(String[] args) {
    
    Calculator calculator = new Calculator();
    System.out.println(calculator.calculate("%", 8, 3));
// Calculator.java


public double calculate(String operator, int firstNumber, int secondNumber) {
        double answer = 0;

        if (operator.equals("+")) {
            answer = firstNumber + secondNumber;
        } else if (operator.equals("-")) {
            answer = firstNumber - secondNumber;
        } else if (operator.equals("*")) {
            answer = firstNumber * secondNumber;
        } else if (operator.equals("/")) {
            answer = firstNumber / secondNumber;
        } else if (operator.equals("%")) {
            answer = firstNumber % secondNumber;
        }
        return answer;
    }

 

2. Calculrator에서 구현한 연산을 세분화된 클래스로 구현하기

  • 각각의 클래스에 +, -, /, * 를 구현했다.
  • Calculator 클래스에 4가지 새로 구현한 클래스들을 사용 할 수 있게 코드를 새로 기입했다.
  • private와 final을 이용해서 4개의 클래스 코드가 영향을 받지 않게 해주었다.
  • Calculator를 생성하게 되면 4개의 연산자를 사용할 수 있고 그 클래스들을 가리킬수 있게 this를 사용했다.
// Add class - 더하기 연산을 하기 위한 클래스

package Calculator;

public class AddOperation {
    public double operate(int firstNumber, int secondNumber){
        return firstNumber + secondNumber;
    }
}
// Calculator 클래스를 변경함

    private final AddOperation addOperation;
    private final SubstractOperation substractOperation;
    private final MultipleOperation multipleOperation;
    private final DivideOperation divideOperation;


    public Calculator(AddOperation addOperation,
                      SubstractOperation substractOperation,
                      MultipleOperation multipleOperation,
                      DivideOperation divideOperation){
        this.addOperation = addOperation;
        this.substractOperation = substractOperation;
        this.multipleOperation = multipleOperation;
        this.divideOperation = divideOperation;
    }

 

3. 추상화 작업해보기

  • Abstract를 사용해서 각각의 연산 클래스들을 추상화 시켜 보았다.
  • 추상화를 하기 위해  AbstractOperation 클래스를 만들었고 2개의 숫자를 입력 받을 수 있게 코드를 짰다.
  • 연산 클래스 4개 모두 AbstractOperation 를 오버라이딩 했다.
  • Calculator 클래스의 코드도 AbstractOperation를 사용할 수 있게 했다.
  • 추상화를 시키고 나면 Main 클래스에서 2가지 숫자를 입력받고 계산 할 수 있게 된다.
// 더하기 클래스

public class AddOperation extends AbstractOperation{
    @Override
    public double operate(int firstNumber, int secondNumber){
        return firstNumber + secondNumber;
    }
}
// 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 answer = 0;
    answer = operation.operate(firstNumber, secondNumber);
    return answer;
}
// Main 클래스

Calculator calculator = new Calculator(new AddOperation());
System.out.println(calculator.calculate(10, 20));
calculator.setOperation(new MultipleOperation());
System.out.println(calculator.calculate(10, 20));

 

첫 번째를 구현 하는 것은 쉬웠으나 

두 번째를 구현하는 부분에서는 각각의 클래스를 구현해서 세분화 한적이 없었으므로 헷갈리는 부분도 있었으나 강의도 다시 찾아보고 강의자료도 다시 읽어 보면서 구현할 수 있었다.

세 번째인 추상화 작업을 할때도 두 번째와 마찬가지로 다시 한번 읽어보고 찾아봤더니 어느 정도 구현이 가능했다.

 

이렇게 만들어서 사용하는 것에 어서 익숙해져야 겠다는 생각을 했다.