본문 바로가기

Study/개발일지

[백엔드온라인TIL] java 학습 4일차

 🧑‍💻 계산기 만들기

 📌 충분히 고민한 후에도 해결이 되지 않으실 때에는 아래 힌트 살펴보기를 이용해주세요!



Step 1 1️⃣ 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스를 만듭니다.
Calulator 클래스는 연산을 수행하는 반환타입이 double 인 calculate 메서드를 가지고 있습니다.
calculate 메서드는 String 타입의 operator 매개변수를 통해 연산자 매개값을 받습니다.
int 타입의 firstNumber, secondNumber 매개변수를 통해 피연산자 값을 받습니다.
calculate 메서드는 전달받은 피연산자, 연산자를 사용하여 연산을 수행합니다. 

Step 2
 2️⃣ 나머지 연산자(%)를 수행할 수 있게 Calculator 클래스 내부코드를 변경합니다.
Step 3 3️⃣ AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺습니다.
관계를 맺은 후 필요하다면 Calculator 클래스의 내부코드를 변경합니다.
나머지 연산자(%) 기능은 제외합니다.
Step 2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
hint. 클래스의 책임(단일책임원칙) 

Step 4 4️⃣ AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들을 AbstractOperation(추상 클래스)를 사용하여 추상화하고 Calculator 클래스의 내부 코드를 변경합니다.
Step 3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
hint. 클래스간의 결합도, 의존성(의존성역전원칙)
❗️Calculator의 calculate 메서드의 매개변수가 변경되었습니다. 



 📌 충분히 고민한 후에도 해결이 되지 않으실 때에는 아래 힌트 살펴보기를 이용해주세요!



Step 1 1️⃣ 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스를 만듭니다.
Calulator 클래스는 연산을 수행하는 반환타입이 double 인 calculate 메서드를 가지고 있습니다.
calculate 메서드는 String 타입의 operator 매개변수를 통해 연산자 매개값을 받습니다.
int 타입의 firstNumber, secondNumber 매개변수를 통해 피연산자 값을 받습니다.
calculate 메서드는 전달받은 피연산자, 연산자를 사용하여 연산을 수행합니다. 

Step 2
 2️⃣ 나머지 연산자(%)를 수행할 수 있게 Calculator 클래스 내부코드를 변경합니다.
Step 3 3️⃣ AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺습니다.
관계를 맺은 후 필요하다면 Calculator 클래스의 내부코드를 변경합니다.
나머지 연산자(%) 기능은 제외합니다.
Step 2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
hint. 클래스의 책임(단일책임원칙) 

Step 4 4️⃣ AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들을 AbstractOperation(추상 클래스)를 사용하여 추상화하고 Calculator 클래스의 내부 코드를 변경합니다.
Step 3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
hint. 클래스간의 결합도, 의존성(의존성역전원칙)
❗️Calculator의 calculate 메서드의 매개변수가 변경되었습니다. 



 📌 충분히 고민한 후에도 해결이 되지 않으실 때에는 아래 힌트 살펴보기를 이용해주세요!



Step 1 1️⃣ 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스를 만듭니다.
Calulator 클래스는 연산을 수행하는 반환타입이 double 인 calculate 메서드를 가지고 있습니다.
calculate 메서드는 String 타입의 operator 매개변수를 통해 연산자 매개값을 받습니다.
int 타입의 firstNumber, secondNumber 매개변수를 통해 피연산자 값을 받습니다.
calculate 메서드는 전달받은 피연산자, 연산자를 사용하여 연산을 수행합니다. 

Step 2
 2️⃣ 나머지 연산자(%)를 수행할 수 있게 Calculator 클래스 내부코드를 변경합니다.
Step 3 3️⃣ AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺습니다.
관계를 맺은 후 필요하다면 Calculator 클래스의 내부코드를 변경합니다.
나머지 연산자(%) 기능은 제외합니다.
Step 2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
hint. 클래스의 책임(단일책임원칙) 

Step 4 4️⃣ AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들을 AbstractOperation(추상 클래스)를 사용하여 추상화하고 Calculator 클래스의 내부 코드를 변경합니다.
Step 3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
hint. 클래스간의 결합도, 의존성(의존성역전원칙)
❗️Calculator의 calculate 메서드의 매개변수가 변경되었습니다. 

 

 

- 정답 소스코드 

-- AbstractOperation.java 

public abstract class AbstractOperation {

    public abstract double operate(int a, int b);
}

--  Calculator.java 

public class Calculator {
    public Calculator(String per , int a, int b) {
    }

    public double calculate(String per, int a, int b) {
        double c = 0;
        AbstractOperation ab;

        switch(per) {
            case "+" :
                ab = new AddOperation();
                c = ab.operate(a,b);
                break;
            case "-" :
                ab = new SubtractOperation();
                c = ab.operate(a,b);
                break;
            case "*" :
                ab = new MultiplyOperation();
                c = ab.operate(a,b);
                break;
            case "/" :
                ab = new DivideOperation();
                c = ab.operate(a,b);
                break;
            case "%":
                c = a % b;
                break;
            default:
                c = -1;
        }

        return c;
    }
}

-- Main.java 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("연산자를 입력해주세요");
        String per = sc.nextLine();
        System.out.println("첫번째 숫자를 입력해주세요.");
        int a = sc.nextInt();
        System.out.println("두번째 숫자를 입력해주세요.");
        int b = sc.nextInt();

        if (per == "/" && b == 0) {
            System.out.println("0으로 나눌 수 없습니다.");
            System.exit(-1);
        }

        Calculator calc = new Calculator(per, a, b);
        double c = calc.calculate(per,a, b);
        System.out.println("결과 : " + c);

    }
}

-- AddOperation.java

public class AddOperation extends AbstractOperation{
    @Override
    public double operate(int a, int b) {
        return a+b;
    }
}

 

 

-- MultiplyOperation.java

public class MultiplyOperation extends AbstractOperation{
    @Override
    public double operate(int a, int b) {
        return a*b;
    }
}

 

-- SubtractOperation.java

public class SubtractOperation extends AbstractOperation{
    @Override
    public double operate(int a, int b) {
        return a-b;
    }
}

 

-- DivideOperation.java

public class DivideOperation extends AbstractOperation{
    @Override
    public double operate(int a, int b) {
        return a/b;
    }
}
728x90