자바 계산기 구현 미션 Repository입니다.
- 여러분의 포트폴리오로 사용하셔도 됩니다.
- 때문에 이 repo를 fork한 뒤
- 여러분의 개인 Repo에 작업하며
- 이 Repo에 PR을 보내어 멘토의 코드 리뷰와 피드백을 받으세요.
- 여러분 repo는 알아서 해주시고 😀(본인 레포니 main으로 하셔두 되져)
- prgrms-be-devcourse/spring-board 레포로 PR시 branch는 gituser_id을 적어주세요 :)
- base repo :
여기repo
base :username
← head repo :여러분repo
compare :main
또는github_id
- base repo :
- 실제 진행할 PR규칙은 멘토+팀원들과 정하여 진행해주세요 :)
- ← head repo :
여러분repo
compare :main
로 할지 - 또는 ← head repo :
여러분repo
compare :github_id
로 할지
- ← head repo :
- 깃허브를 통한 코드리뷰를 경험해보자
- 기본적인 테스트 코드 작성 및 활용하는 능력해보자
- 스스로 OOP를 생각하고 코드로 옮길 수 있는 능력해보자
- 콘솔로 구현입니다.(스윙으로 구현하시는 분들 계실까봐)
- 객체지향적인 코드로 계산기 구현하기
- 더하기
- 빼기
- 곱하기
- 나누기
- 우선순위(사칙연산)
- 테스트 코드 구현하기
- 계산 이력을 맵으로 데이터 저장기능 만들기
- 애플리케이션이 동작하는 동안 데이터베이스 외에 데이터를 저장할 수 있는 방법을 고안해보세요.
- (선택) 정규식 사용
1. 조회
2. 계산
선택 : 2
1 + 2
3
1. 조회
2. 계산
선택 : 2
1 + 2 * 3
7
1. 조회
2. 계산
선택 : 1
1 + 2 = 3
1 + 2 * 3 = 7
선택 : 2
3 - 2 * 2
-1
중위표기식을 후위표기식으로 바꾸기 위해 자료구조로 스택을 사용했습니다. 따라서 모든 사칙연산에 대해 우선순위 연산으로 작동합니다.
계산 이력을 맵을 사용하여 만들었습니다. 링크드 해시맵을 사용하여 구현했으며 연산기록이 겹칠 수 있기 때문에 각 연산에 관해 고유한 id값을 부여해 저장했습니다.
객체지향적인 프로그래밍을 위해 객체를 분리했습니다. 객체에 관한 설명은 아래와 같습니다.
View : 사용자로부터의 입력과 사용자에게 보여줄 출력에 관한 역할을 담당하는 클래스입니다.
- 사용자에게 기능 목록을 보여줍니다.
- 사용자가 사용하려는 기능을 입력 받습니다.
- 계산 기능을 사용할 경우 식을 입력 받습니다.
- 사용자로부터 잘못된 입력이 주어지면 오류 메시지를 출력하고 다시 입력을 받습니다.
- 기능 수행 후 결과를 출력합니다.
Command : 사용자 입력에 해당하는 명령어를 전달합니다. 프로세서는 이를 통해 요청을 구분하고 처리합니다.
Processor : 계산기가 실행된 후 화면, 계산기, 저장소 사이에 주고 받는 정보들을 올바른 대상에게 전달합니다.
또한 화면, 계산기, 저장소로부터 발생한 오류 메시지를 모두 모아 화면에게 정보를 전달합니다.
- 사용자가 입력한 기능을 수행하도록 합니다.
- 계산기능을 요청한 경우
- 화면에게 계산식 입력 요청을 합니다.
- 받은 식을 계산기에게 전달합니다.
- 계산 결과를 저장소에 전달합니다.
- 계산기의 계산 결과를 화면에게 전달합니다.
- 계산 이력을 요청할 경우
- 저장소에게 계산 이력을 요청합니다.
- 받은 이력을 화면에게 전달합니다.
- 계산기능을 요청한 경우
- 발생한 오류 메시지를 모아 화면에게 전달합니다.
Calculator : 식이 들어오면 연산자와 피연산자를 가지고 계산을 수행합니다.
계산 과정 중에 오류가 발생하면 오류를 발생시키고 계산을 멈춥니다.
연산자 우선순위를 판별하여 계산을 수행합니다.
- 연산자인지 피연산자인지 구분한 후 피연산자라면 값을 저장해 놓고 연산자라면 Operator 객체에게 연산을 요청합니다.
- 이때 연산 요청은 연산자의 우선순위를 고려하여 요청합니다.
Operator : 연산자와 관련된 상태를 관리하고 사칙연산을 합니다.
연산자의 종류를 관리하고 유효한 연산자인지 판단합니다.
또한 연산자의 우선순위를 저장하고 관리합니다
우선 순위를 통해 계산기는 연산자 객체에게 연산을 수행하도록 합니다.
HistoryStorage : 입력 받은 계산식과 연산 결과를 저장합니다. 또한 연산 결과를 모두 출력합니다.