1. 사칙연산을 수행 후, 결과값 반환 메서드 구현 & 연산 결과를 저장하는 컬렉션 타입 필드를 가진 Calculator 클래스를 생성

  1. 사칙연산을 수행한 후, 결과값을 반환하는 메서드 구현

  2. 연산 결과를 저장하는 컬렉션 타입 필드를 가진 Calculator 클래스를 생성

    중복 저장 필요. 순서는 굳이? ⇒ List

    • ArrayList : 단방향 포인터 구조 → 각 데이터에 대한 인덱스를 가지고 있어 조회 성능이 뛰어남.
    • LinkedList : 양방향 포인터 구조 → 데이터의 삽입과 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 됨.

    삽입은 빈번하지만, 삭제가 필요한가? → 일단 ArrayList로 진행

    ArrayList<Integer> results = new ArrayList<Integer>();
    
  3. ① 양의 정수 2개(0 포함)와 연산 기호를 매개변수로 받아 사칙연산(➕,➖,✖️,➗) 기능을 수행 → ② 결과 값을 반환하는 메서드

2. Lv 1에서 구현한 App 클래스의 main 메서드에 Calculator 클래스가 활용될 수 있도록 수정

  1. 연산 수행 역할 : Calculator 클래스가 담당

  2. 연산 결과 : Calculator 클래스의 연산 결과를 저장하는 필드에 저장

    <aside>

    결과값만 저장되는 것이 아니라 수식도 같이 저장되게 하고 싶은데 어떻게 하지?

    → 컬렉션의 자료형을 String으로 지정하면 수식을 저장할 수 있음.

    프린트한 문장을 변수에 담을 수 있나?

    → 애초에 String 변수에 프린트할 내용을 담고, 그 변수를 출력하면 됨.

    </aside>

3. App 클래스의 main 메서드에서 Calculator 클래스의 연산 결과를 저장하고 있는 컬렉션 필드에 직접 접근하지 못하도록 수정 (캡슐화)

  1. 컬렉션 필드 캡슐화 시키기

    public class Calculator {
        private ArrayList<String> results = new ArrayList<String>();
        ...
    
  2. 간접 접근을 통해 필드에 접근하여 가져올 수 있도록 구현(Getter 메서드)

    ArrayList<String> getResult() {
        return results;
    }
    

    <aside> ❗

    getter의 반환자료형을 컬렉션으로 지정해줘야 results 컬렉션을 그대로 받아올 수 있음

    </aside>

  3. 간접 접근을 통해 필드에 접근하여 수정할 수 있도록 구현합니다. (Setter 메서드)

    void setResult(String result) {
        results.add(result);
    }
    
  4. 위 요구사항을 모두 구현 했다면 App 클래스의 main 메서드에서 위에서 구현한 메서드를 활용 해봅니다.

    String printing_result = num1 + " " + mark + " " + num2 + " = " + result;
    
    calculator.setResult(printing_result);
    System.out.println("현재까지 진행된 계산: " + calculator.getResult());
    

4. Calculator 클래스에 저장된 연산 결과들 중 가장 먼저 저장된 데이터를 삭제하는 기능을 가진 메서드를 구현한 후 App 클래스의 main 메서드에 삭제 메서드가 활용될 수 있도록 수정

  1. 가장 먼저 저장된 데이터를 삭제하는 기능을 가진 메서드 구현

    void removeResult() {
        results.remove(0);
    }
    
  2. main 메서드에 삭제 메서드 활용하기

    → 컬렉션 안의 내용이 3개가 넘어갈 경우, 첫번째 데이터를 삭제하여 매번 3개의 내용만 출력되도록 진행

추가 진행

  1. 스캐너에 잘못된 값 입력 시 예외 처리

  2. 나눗셈 분모 0인 경우

  3. 나눗셈 결과가 소수인 경우 처리

    calculate() 메서드의 반환 자료형을 double로 바꾸기

    → 애초에 num2가 int이기에 결과가 소수로 안나옴