TIL

TIL 2025/01/08

호롤로 2025. 1. 8. 23:39

▶ 진행사항

- 오늘은 Java 3주차 강의와 계속 병행하던 '계산기 만들기' 프로젝트를 Lv 2단계 막바지까지 코드 구현을 완료하였다.

 

▶ 계산기 만들기 LV2

- 계산기 만들기 LV2는 기존 진행한 LV1 에 비해 많은 어려움을 겪었다. 기존 LV1에선 단순히 입력받은 값을 조건문 (if)문을 사용해, 사칙연산 기호별 계산을 진행하면 되는거였다면, LV2는 별도 컬렉션 타입 필드를 가진 클래스를 활용하여, 결과값을 구현하고 연산 결과를 저장 & 불러오는 기능까지 필요했다.

 

▷ 클래스 만들기

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

 - 신규 Calculator 생성 후, 조건문 (switch) 사용하여  사칙연산 수행 및 값 반환하는 메서드 구현

    (기존 if문 → switch 문으로 수정 진행 - TIL 2025/01/03)

public class Calculator {
    private List<Integer> results;

    public Calculator() {
        results = new ArrayList<>(); // 연산 결과를 저장하는 컬렉션 타입 필드 선언 및 생성
    }

    // 사칙연산 수행 메서드
    public int calculate(int firstNo, int SecondNo, char fbo) {
        int result = 0;
        switch (fbo) {
            case '+':
                result = firstNo + SecondNo;
                break;
            case '-':
                result = firstNo - SecondNo;
                break;
            case '*':
                result = firstNo * SecondNo;
                break;
            case '/':
                result = firstNo / SecondNo;
                break;
        }

        results.add(result);
        return result;
    }

    public List<Integer> getResults() {
        return results;
    }
}

 

◆ App 클래스의 main 메서드에 Calculator 클래스가 활용될 수 있도록 수정 진행

    (연산수행 역할은 Calculator 클래스가 담당 / 연산 결과도 Calculator 클래스의 연산 결과를 저장하는 필드에 저장)

     ※ 별도로 예시에는 첫번째값, 두번째값 입력 후, 사칙연산 입력이었으나, 보기좋게 위치 변경 진행

public static void main(String[] args) {
    System.out.println("Hello, Calculator!");
    Scanner sc = new Scanner(System.in);
    Calculator calculator = new Calculator(); // Calculator 인스턴스 생성

    while (true) {
        // 첫번째 값 입력받기
        System.out.println("첫 번째 숫자를 입력하세요: ");
        int firstNo = sc.nextInt();
        // 사칙연산 입력받기
        System.out.println("사칙연산 기호를 입력하세요: ");
        char fbo = sc.next().charAt(0);
        // 두번째 값 입력받기
        System.out.println("두 번째 숫자를 입력하세요: ");
        int secondNo = sc.nextInt();

        int result = calculator.calculate(firstNo, secondNo, fbo);
        System.out.println("결과: " + firstNo + " " + fbo + " " + secondNo + " = " + result); // 결과값 반환

 

◆ 연산 결과를 저장하고 있는 컬렉션 필드에 접근하지 못하도록 수정(캡슐화)

public class Calculator {
    private List<Integer> results;

    public Calculator() {
        results = new ArrayList<>(); // 연산 결과를 저장하는 컬렉션 타입 필드 선언 및 생성
    }

    // 사칙연산 수행 메서드
    public int calculate(int firstNo, int SecondNo, char fbo) {
        int result = 0;
        switch (fbo) {
            case '+':
                result = firstNo + SecondNo;
                break;
            case '-':
                result = firstNo - SecondNo;
                break;
            case '*':
                result = firstNo * SecondNo;
                break;
            case '/':
                result = firstNo / SecondNo;
                break;
        }

        addResult(result);
        return result;
    }

    public List<Integer> getResults() { // 계산 결과를 저장
        return new ArrayList<>(results);
    }

    public void setResults(List<Integer> newResults) {
        this.results = new ArrayList<>(newResults);
    }

    public void addResult(int result) {
        results.add(result);
    }
}

 

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

- 작업도중 에러 발생으로 수정 진행 中

 

▶ 트러블 슈팅

오늘은 오전시간을 제외한 하루 대부분을 프로젝트 코드 작성에 쏟아 부었으나, 계산기를 불편함없이 좀더 활용적이게 작동시킬 방법이 없을까 고민하고 이런식으로 작동시키려면 어떻게 해야하지? 같은 물음이 꼬리에 꼬리를 물고 이어져, 아쉽게도 하루를 마감하기 전 LV2 완성을 하지 못하였다.

 

현재 내가 짠 코드는 우선 각각 총 2개의 값을 내려받고 사칙연산을 입력받을시 계산이 진행되는데, 이후, 저장된 결과값을 삭제할 것인지, 아니면 계산으로 돌아갈 것인지의 선택지를 주는 방식의 코드 작성을 끝내지 못했다. 이것 말고도 번잡하게 여러 고민들이 있지만, 너무 난잡해지기에 우선적으로 내일은 위 과제를 먼저 해결해 보려 한다. 4주차 5주차 강의도 아직 못봣는데 너무 고민만 하고있는게 아닌지 모르겠다 ㅜㅜ... 

 

▶ 마치며

내가 배움이 얕아, 아직까지 내가 생각하는 방식의 코드를 짜는게 여간 쉬운일이 아니었다... 프로젝트 단계마다 이걸 적용해 보세요. 다음은 이걸 해보세요.. 하고 추가될때마다 기본 반나절은 잡고 진행하고 있는것 같다. 다른분들은 이미 후딱 해치우고 강의도 다 들었던데... 아직 3주차도 제대로 이해못하고 진도를 따라가는데 급급한 자신이 한심하다.

'TIL' 카테고리의 다른 글

TIL - 2025/01/17  (1) 2025.01.17
TIL 2024/01/09  (0) 2025.01.10
TIL - 2025/01/03  (1) 2025.01.03
TIL - 2024/12/31  (0) 2024.12.31
TIL - 2024/12/30  (1) 2024.12.30