[내일배움캠프] Java 기초문법으로 만드는 계산기 Step2.

김재진·2025년 12월 9일

내일배움캠프

목록 보기
13/70

1. Class 활용하기

  • Step1 에서 작성한 계산기를 토대로 계산기능만 따로 Class 를 만들어서 수행하게 만들고 결과 값을 저장하는 기능까지 추가해보았다.

2. Class를 활용하여 만든 계산기

  • Step1의 기능을 토대로 Calculator 클래스를 만들어 계산기능을 따로 빼주었다.
  • 계산된 값을 리스트에 저장하고 출력하는 기능을 만들었다. (계산된 값은 캡슐화 하여 수정 불가하게 만들었다.)

클래스 Calculator (계산 기능을 수행하는 클래스)

public class Calculator {

    private List<Double> resultHistory = new ArrayList<>(); // 결과 값을 저장할 리스트 

    public double calculate(double num1, double num2, String op) { // 계산 메서드
        double result =- 0;

        switch (op) { // Step1과 동일하나 0으로 나눌 수 없는 예외를 메서드에서 처리
            case "+" -> result = num1 + num2;
            case "-" -> result = num1 - num2;
            case "*" -> result = num1 * num2;
            case "/" -> {
                if (num2 == 0) {
                    System.out.println("0으로 나눌 수 없습니다.");
                } else {
                    result = num1 / num2;
                }
            }
            default -> System.out.println("정확한 연산자를 입력해주세요");
        }
        resultHistory.add(result); // 결과 값을 리스트에 저장
        return result; // 결과를 반환
    }
    public List<Double> getResultHistory() { // getter를 통해 리스트를 새로운 리스트로 반환
        return new ArrayList<>(resultHistory);
    }

    public void removeResult() { // setter를 통해 최근 내용이 지워진 새로운 리스트 반환
        if (!resultHistory.isEmpty()) {
            resultHistory.remove(0);
        }
    }
}

클래스 App(계산기가 작동하는 클래스)

public class App {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in); // Step1과 동일
        Calculator calc = new Calculator(); // Calculator 클래스에서 새로운 객체를 생성

        while (true) {

            double num1;
            try {
                System.out.println("첫 번째 숫자를 입력하세요: ");
                num1 = sc.nextDouble();
            } catch (InputMismatchException e) {
                System.out.println("숫자를 입력하세요.");
                sc.nextLine();
                continue;
            }

            double num2;
            try {
                System.out.println("두 번째 숫자를 입력하세요: ");
                num2 = sc.nextDouble();
            } catch (InputMismatchException e) {
                System.out.println("숫자를 입력하세요.");
                sc.nextLine();
                continue;
            }

            System.out.println("연산자를 입력하세요 (+,-,*,/): ");
            String op = sc.next();


            double result = calc.calculate(num1, num2, op);// Calculator 클래스의 메서드를 활용하여 계산
            System.out.println("결과 : " + result);

            System.out.println("지금까지의 계산 결과: " + calc.getResultHistory()); // getter를 통해 리스트 새로 생성

            System.out.println("결과를 삭제하시겠습니까? (Y/N): ");
            String delete = sc.next();

            if (delete.equalsIgnoreCase("Y")) {
                calc.removeResult();
                System.out.println("결과가 삭제되었습니다.");
                System.out.println("남은 결과: " + calc.getResultHistory()); // setter를 통해 최근 결과가 지워진 새로운 리스트 생성
            } else {
                System.out.println("결과가 유지됩니다.");
            }

            System.out.println("계산을 계속하시겠습니까? (Y/N): ");
            String again = sc.next();

            if (again.equalsIgnoreCase("N")) {
                break;
            }

        }

        System.out.println("계산을 종료합니다.");
        sc.close();

    }
}

3. 어려웠던 점

  • getter와 setter를 활용하는 방법이 어려워서 처음에는 ai를 통해서 내가 원하는 기능을 활용하는 방법을 알려달라고 했다. 그리고 그 코드를 보고 내가 이해한 내용을 바탕으로 코드를 다시 작성해보았다. private로 접근이 불가능한 List의 값을 getter를 통해서 그와 값이 같은 새로운 ArrayList를 반환하고, setter를 통해서 getter로 만들어진 새로운 ArrayList에서 remove를 작업하는 것으로 이해하고 그렇게 작성해보았다. 아직까지 내가 이해한 내용이 맞는지 잘 모르겠어서 더 어려운 것 같다.
profile
개발공부 처음해보는 사람

0개의 댓글