TIL

TIL 2024/01/09

호롤로 2025. 1. 10. 11:26

▶ 진행사항

- 오늘은 3주차 강의 이해가 안되는 부분 복습과 '계산기 만들기' 프로젝트의 2단계 부분 마무리를 지었다.

 

▶ 계산기 만들기 LV2 - 마무리

- 어제의 연장선으로 오늘은 계산기 만들기 프로젝트의 2단계 부분의 코드를 좀더 보완하고 깔끔하게 작동시키기 위해 어느 부분을 수정하면 좋을까로 코드를 하루종일 쳐다보고 있었던것 같다.

 

결과적으로는 필요없는 일부 코드를 삭제, 개선 후 프로젝트 LV2를 마무리하고, 깃허브 업로드를 진행했다.

 

▷ 개선된 switch 문 (case '+': result = firstNo + secondNo; break 을 case '+' -> firstNo + secondNo; 로 개선된것을 볼수 있다.

public int calculate(int firstNo, int secondNo, char fbo) {
    int result = switch (fbo) {
        case '+' -> firstNo + secondNo;
        case '-' -> firstNo - secondNo;
        case '*' -> firstNo * secondNo;
        case '/' -> firstNo / secondNo;
        default -> 0;
    };

 

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

public void deleteFirstSave() {
    if (!results.isEmpty()) {
        results.remove(0); // 첫 세이브값 삭제
    }
}

 

※ 이후 출력부분에서 데이터 삭제 메서드 구현

System.out.println("가장 먼저 저장한 값을 삭제 하시겠습니까? (delete 입력시 삭제 or 아무키 입력으로 continue)");
String delete = sc.next();
if (delete.equalsIgnoreCase("delete")) { // equalIgnoreCase = 대소문자 구분없이 입력값 인식
    if (!calculator.getResults().isEmpty()) {
        calculator.deleteFirstSave(); // 첫 세이브값 삭제
        System.out.println("삭제 완료."); //

 

▷ 프로젝트 LV2 마무리 코드

public class App {

    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);

            // 결과값 저장, 현재 저장된 값 출력 및 삭제 여부 출력
            System.out.println("현재 저장된 결과 : " + calculator.getResults().size() + " " + calculator.getResults());

            System.out.println("가장 먼저 저장한 값을 삭제 하시겠습니까? (delete 입력시 삭제 or 아무키 입력으로 continue)");
            String delete = sc.next();
            if (delete.equalsIgnoreCase("delete")) { // equalIgnoreCase = 대소문자 구분없이 입력값 인식
                if (!calculator.getResults().isEmpty()) {
                    calculator.deleteFirstSave(); // 첫 세이브값 삭제
                    System.out.println("삭제 완료."); //
                }
            }

            System.out.println("계속 계산하시겠습니까? (exit 입력시 종료 or 아무키 입력으로 continue)");
            String exit = sc.next();
            if (exit.equalsIgnoreCase("exit")) {
                break;
            }
        }
        // 종료시 마지막 저장된 값 차례대로 출력
        System.out.println("최종 저장 결과: ");
        for (int res : calculator.getResults()) {
            System.out.println(res);
        }
        sc.close();
    }
}
public class Calculator {
    private List<Integer> results;

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

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

        addResult(result);
        return result;
    }

    // Getter 메서드 - 캡슐화
    public List<Integer> getResults() { // 계산 결과를 저장
        return new ArrayList<>(results);
    }

    // Setter 메서드 - 캡슐화
    public void setResults(List<Integer> newResults) {
        this.results = new ArrayList<>(newResults);
    }

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

    public void deleteFirstSave() {
        if (!results.isEmpty()) {
            results.remove(0); // 첫 세이브값 삭제
        }
    }
}

 

▶ 마무리 회고

- 이번 프로젝트를 레벨2까지 마무리하며 어려웠던 점이라고 한다면, 물론 자신있게 처음부터 모든부분이 다 어려웠다고 할 수 있을거 같다. 하지만 그렇다고 힘들었다고는 생각하지 않는다. 어려운 부분이 나올때마다. 계속해서 복습 및 검색으로 해당 메서드는 어찌 작동하는지에 대해 더 자세히 들여다 볼수 있었던 시간이라고 생각한다. 처음 프로젝트를 시작했을땐 java에 e도 모르던 내가 그래도 기초를 갈고닦을수있던 좋은 경험이었다.

'TIL' 카테고리의 다른 글

TIL - 2025/02/03  (0) 2025.02.03
TIL - 2025/01/17  (1) 2025.01.17
TIL 2025/01/08  (0) 2025.01.08
TIL - 2025/01/03  (1) 2025.01.03
TIL - 2024/12/31  (0) 2024.12.31