Skip to content

fryzke/Calculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 

Repository files navigation

요구사항

  1. 기능 정의
  • 사칙연산 (calc) 입력예시 : 1 + 2
    • 더하기(sum) : 두 수를 더하는 식을 입력 받으면 결과를 출력한다.
    • 빼기(sub) : 두 수를 빼는 식을 입력 받으면 결과를 출력한다.
    • 곱하기(mul) : 두 수를 곱하는 식을 입력받으면 결과를 출력한다.
    • 나누기(div) : 두 수를 나누는 식을 입력받으면 결과 출력한다.
  • 결과 기록 출력(print log)
    • 지금까지 실행한 계산의 결과값을 차례대로 출력한다.
  • 첫번째 결과 삭제(delete first)
    • 가장 처음 실행한 계산의 결과값을 기록에서 삭제한다.
  • 기준값보다 큰 결과값 출력(search)
    • 입력받은 기준값(실수)보다 큰 결과값을 차례로 출력한다.
  • 프로그램 종료(exit)
    • 프로그램을 종료한다.
  1. 인터페이스 방식 : 콘솔 기반

  2. 예외처리

    • 0으로 나눴을 때 : “error: 0으로 나눌 수 없습니다.” 메시지 출력
    • 사칙연산 외의 문자가 들어왔을 때 : “error: 지원하지 않는 연산자입니다.” 메시지 출력
    • 필수 과제 - 양의 정수 이외의 숫자가 입력되었을 때 : “error: error: 양의 정수만 계산 가능합니다.” 메시지 출력
    • 필수 과제 - 입력 형식을 지키지 않았을 때 : “error:올바른 형식으로 입력해주세요. ex) 1 + 2
    • 도전 과제 - 양의 실수 이외의 숫자가 입력되었을 때 : “error: 실수만 입력할 수 있습니다” 메시지 출력
    • 도전 과제 - 기준값으로 실수 이외의 숫자가 입력되었을 떄 "error: 숫자만 입력하세요." 메시지 출력
    • 도전 과제 - 빈 배열에 접근하려고 할 때 "error: 결과 로그가 비어있거나 존재하지 않습니다." 메시지 출력

설계

  • 제네릭 기반 클래스 : Calculator<T extends Number & Comparable<T>>

    • Number: 산술 연산을 위해 숫자로 변환(doubleValue()) 가능한 타입만 허용하도록 함.

    • Comparable: 로그 조회 시 기준값과 크기를 비교(compareTo())할 수 있도록 함.

  • Enum 상수를 통한 연산자 타입 관리

    • 사용자가 입력한 문자열(+, - 등)을 객체인 OperatorType으로 변환하여 switch 문에서 안전하게 처리할 수 있도록 함.
  • 스트림 기반의 람다식을 사용한 데이터 조회

    • searchLog(T param) 메서드는 Stream의 filter를 사용하여 저장된 데이터 중 특정 기준을 만족하는 값만 추출함.

어려웠던 점

  • Generic 활용
    • T 타입끼리는 연산자를 적용할 수 없는 오류를 계속 겪게 됨.
    • 자바 컴파일러는 T가 무엇인지 끝까지 의심하기 때문에 이에 제약을 걸어주어야 함을 알게 됨.
    • Number, Comparable 제약을 걸어주어 doubleValue(), compareTo()를 사용할 수 있게 됨.
  • Enum 활용
    • enum 상수를 작성하였으나 이를 어떻게 활용해야할지 알 수가 없었음.
    • 또한 입력받은 연산자와 일치하는 enum값이 넘어가도록 하려면 어떻게 해야하는지 알 수 없었음.
    • values()로 enum에 담긴 값을 자동으로 리스트화할 수 있음을 알게 됨.
    • 이를 for문으로 순회하여 입력받은 연산자와 비교하면 해당 값으로 대입할 수 있게 됨.
    • 향상된 for문과 values() 함수를 통해 역추적하여 넘기는 함수를 구현함.

About

Java app can calculate elementary arithmetic

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages