내일배움캠프/TIL

[Spring_4기 본캠프] 3주차 - 계산기 lv1 구현하기 | Day 21

austindynasty 2024. 11. 15. 21:12

1. 계산기 구현하기 과제

<Lv.1 클래스 없이 기본적인 연산을 수행할 수 있는 계산기 만들기>

- 필수 기능 -

1) 양의 정수(0을 포함)를 입력받기

2) 사칙연산 기호를 입력받기

3) 입력받은 정수들의 연산 결과를 출력 

package lv1;

import java.util.Scanner;

public class CalculatorApp {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.print("숫자를 입력하세요 : ");
            int num1 = sc.nextInt();

            System.out.print("연산자를 입력하세요 (exit 입력 시 종료됩니다) : ");
            String operator = sc.next();

            if (operator.equals("exit")) {
                System.out.println("프로그램을 종료합니다. ");
                break;
            }

            System.out.print("숫자를 입력하세요 : ");
            int num2 = sc.nextInt();

            int result;

            switch (operator) {
                case "-" -> result = num1 - num2;
                case "+" -> result = num1 + num2;
                case "*" -> result = num1 * num2;
                case "/" -> {
                    if (num2 == 0) {
                        System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
                        continue;
                    }
                    result = num1 / num2;
                }
                default -> {
                    System.out.println("잘못된 연산자 입니다. 다시 입력해주세요.");
                    continue;
                }
            }
            System.out.println(num1 + operator + num2 + " = " + result);
        }
        sc.close();
    }
}

 

<제한사항>

- 사용자가 숫자를 입력할 때 양의 정수 (0 포함)를 받을 수 있지만 0으로 나눌 수는 없다.

- 연산 기호는 사칙연산 기호를 기준으로 한다. ( +, -, *, / )

- exit 를 입력하면 종료되어야 함

 

<구현계획>

- Scanner 클래스를 사용해 숫자와 연산기호를 입력받자.

- 종료 조건은 exit를 눌렀을 때만 발동하도록 하자. 

- 사칙연산 기호를 입력받아 num1과 num2의 연산 결과를 출력하자. 

- 사칙연산 기호는 + (덧셈), - (뺄셈), * (곱셈), / (나눗셈) 으로 제한하고 다른 연산자를 입력할 경우 잘못된 입력으로 프로그램 다시 시작

- 연산 결과가 출력되면 자동으로 프로그램을 다시 실행한다. (while문 true) 

- if문을 사용해 잘못된 입력 (0으로 나눌 경우, 연산기호가 잘못될 경우)이 있으면 프로그램이 다시 시작된다. 

 

해당 코드를 작성할 때, 영빈님 (나의 구원자.. 내가 아는 사람 중 최고 코딩 천재)이 페어 프로그래밍이라는 것을 알려주셨다.

페어 프로그래밍이란 애자일 소프트웨어 개발 방법론 중 하나로, 두 명의 프로그래머가 한 컴퓨터에서 짝을 이루어 작업하는 방법이다.

한 명은 코드를 작성하고 (driver) 한 명은 관찰하거나 지시를 내린다 (observer, navigator). 

즉 영빈님이 프로그래밍의 방향을 설명하면 내가 드라이버가 되어 지시대로 코드를 작성하는 것이다. 

다 알려주는 거랑 뭐가 달라? 라는 생각이 들 수도 있지만 네비게이터가 지시하는 방향을 드라이버가 알아듣고 쓸 수 있어야 페어 프로그래밍이 정상적으로 진행된다. ~라고 쓰세요 라기 보다는 ~를 구현하기 위한 메서드를 써주세요 라는 식으로 진행이 되었다.

실시간으로 코드를 작성해본 적도 없고 아직 공부도 많이 안되어있는 상태라서 그냥 캐리만 받다 끝나진 않을까 걱정했는데 

생각보다 술술 써져서 놀랐다. 이건 내 능력이 아니라 아마 네비게이터인 영빈님이 지시를 잘 해주셔서 된 것 같지만..

구현계획이나 쓰고싶은 메서드들이 생각은 나지만 아직 실전에서 코드를 짜본 적이 없어서 방향을 잡지 못했었는데 이번 기회를 통해

아 코드를 이런 흐름으로 작성하는 거구나라는 것을 배우게 되었다. 

 

<문제점>

- exit를 입력하는 것이 연산기호 입력부분에 있어서 종료하기 불편해짐

- equals() 메서드를 사용해 정확히 소문자로 exit를 입력해야 종료된다. 

 

<해결방안, 개선점>

- 사용자의 입력을 받는 프로그램의 시작 부분에 계산을 계속하려면 cal , 종료하려면 exit를 누르세요 라는 조건을 만들어 처음부터 지시사항을 이행할 수 있게 수정한다.

- equalsIgnoreCase 메서드를 사용해 대소문자를 구분하지 않고 비교하게 한다.