기능적 요구사항
- 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다.
- 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다.
- 예를 들어 2 + 3 * 4 / 2와 같은 문자열을 입력할 경우 (2 + 3) * 4 / 2 실행 결과인 10을 출력해야 한다.
- 입력 가능한 숫자는 양의 정수로 제한한다.
- 사용자가 exit을 입력하기 전까지 기능을 반복적으로 수행한다.
- 예외가 발생하면 [ERROR] 에러 메시지 형식으로 메시지를 출력하고 입력을 다시 받는다.
- 예를 들어, 입력으로 2 q 4 이 들어온다면 [ERROR] 잘못된 연산자를 사용하셨습니다 를 출력하고 입력을 다시 받는다.
- 입출력 메시지나 에러 메시지는 본인이 원하는대로 하면 된다.
프로그래밍 제한사항
- 메서드는 하나의 일만 하도록한다.
- 하나의 메서드가 10 라인을 넘지 않도록 한다. 어렵다면 최대 15 라인을 넘지 않도록 해본다.
- else 예약어를 사용하지 않는다.
- 인덴트는 한 단계를 넘지 않도록 한다. 예를 들어 for문 안에 if 문이 있다면 인덴트는 두 단계이다. 너무 어렵다면 두 단계도 허용한다.
- 코드를 더 개선해보고 싶다면 객체지향 생활 체조 9원칙을 참고해 리팩토링 해본다.
- 기능을 구현하기 전에 README.md에 구현할 기능 목록을 정리해 추가한다.
- README.md 에 기능 요구사항을 정리해보고 적절한 단위로 커밋을 나눠서 커밋해보자.
- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
- AngularJS Commit Message Conventions 를 참고해 commit log를 남긴다.
입출력 예시
1) 입력
입력 1
실행할 연산을 입력해주세요:
2 + 3 * 4 / 2
입력 2
실행할 연산을 입력해주세요:
exit
2) 출력
출력 1
10
출력 2
프로그램을 종료합니다.
느낀 점 & 개선할 점
- README에 요구사항을 먼저 정리하는 것은 처음이었는데, 다소 오래걸렸다 → 좀 더 간결하고 정확하게 정리하도록 노력하자.
- 인덴트나 메소드 라인 수 등의 부가적인 프로그래밍 제한사항에 너무 집중하다보니 정작 코드 자체에 고민을 많이 하지 못했다. → 기본적인 부분을 완성한 후 리팩토링에 집중하자.
- 접근제어자 사용에 미숙했고, 불필요한 인스턴스 변수를 선언했다. → 캡슐화, 정보은닉 등 객체지향의 핵심적인 개념을 학습하자.
- 테스트 코드를 작성하지 못했다. → Gradle 등의 빌드툴을 공부하고, JUnit을 이용한 테스트 코드를 작성하자.
코드
https://github.com/JungTag/java-study/tree/task1/string-calculator/src/study/stringcalculator
GitHub - JungTag/java-study: 멋사 9기 자바 스터디
멋사 9기 자바 스터디. Contribute to JungTag/java-study development by creating an account on GitHub.
github.com
'프로그래밍 언어 > Java + Kotlin' 카테고리의 다른 글
[Java] Comparable과 Comparator (0) | 2022.04.27 |
---|---|
[Java] 스터디 17주차: 자동차 경주 게임 만들기 (0) | 2021.10.04 |
[Java] 스터디 15주차: 람다식 (0) | 2021.09.24 |
[Java] 스터디 14주차: 제네릭 (0) | 2021.09.07 |
[Java] 스터디 13주차: I/O (0) | 2021.09.02 |
기능적 요구사항
- 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다.
- 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다.
- 예를 들어 2 + 3 * 4 / 2와 같은 문자열을 입력할 경우 (2 + 3) * 4 / 2 실행 결과인 10을 출력해야 한다.
- 입력 가능한 숫자는 양의 정수로 제한한다.
- 사용자가 exit을 입력하기 전까지 기능을 반복적으로 수행한다.
- 예외가 발생하면 [ERROR] 에러 메시지 형식으로 메시지를 출력하고 입력을 다시 받는다.
- 예를 들어, 입력으로 2 q 4 이 들어온다면 [ERROR] 잘못된 연산자를 사용하셨습니다 를 출력하고 입력을 다시 받는다.
- 입출력 메시지나 에러 메시지는 본인이 원하는대로 하면 된다.
프로그래밍 제한사항
- 메서드는 하나의 일만 하도록한다.
- 하나의 메서드가 10 라인을 넘지 않도록 한다. 어렵다면 최대 15 라인을 넘지 않도록 해본다.
- else 예약어를 사용하지 않는다.
- 인덴트는 한 단계를 넘지 않도록 한다. 예를 들어 for문 안에 if 문이 있다면 인덴트는 두 단계이다. 너무 어렵다면 두 단계도 허용한다.
- 코드를 더 개선해보고 싶다면 객체지향 생활 체조 9원칙을 참고해 리팩토링 해본다.
- 기능을 구현하기 전에 README.md에 구현할 기능 목록을 정리해 추가한다.
- README.md 에 기능 요구사항을 정리해보고 적절한 단위로 커밋을 나눠서 커밋해보자.
- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
- AngularJS Commit Message Conventions 를 참고해 commit log를 남긴다.
입출력 예시
1) 입력
입력 1
실행할 연산을 입력해주세요:
2 + 3 * 4 / 2
입력 2
실행할 연산을 입력해주세요:
exit
2) 출력
출력 1
10
출력 2
프로그램을 종료합니다.
느낀 점 & 개선할 점
- README에 요구사항을 먼저 정리하는 것은 처음이었는데, 다소 오래걸렸다 → 좀 더 간결하고 정확하게 정리하도록 노력하자.
- 인덴트나 메소드 라인 수 등의 부가적인 프로그래밍 제한사항에 너무 집중하다보니 정작 코드 자체에 고민을 많이 하지 못했다. → 기본적인 부분을 완성한 후 리팩토링에 집중하자.
- 접근제어자 사용에 미숙했고, 불필요한 인스턴스 변수를 선언했다. → 캡슐화, 정보은닉 등 객체지향의 핵심적인 개념을 학습하자.
- 테스트 코드를 작성하지 못했다. → Gradle 등의 빌드툴을 공부하고, JUnit을 이용한 테스트 코드를 작성하자.
코드
https://github.com/JungTag/java-study/tree/task1/string-calculator/src/study/stringcalculator
GitHub - JungTag/java-study: 멋사 9기 자바 스터디
멋사 9기 자바 스터디. Contribute to JungTag/java-study development by creating an account on GitHub.
github.com
'프로그래밍 언어 > Java + Kotlin' 카테고리의 다른 글
[Java] Comparable과 Comparator (0) | 2022.04.27 |
---|---|
[Java] 스터디 17주차: 자동차 경주 게임 만들기 (0) | 2021.10.04 |
[Java] 스터디 15주차: 람다식 (0) | 2021.09.24 |
[Java] 스터디 14주차: 제네릭 (0) | 2021.09.07 |
[Java] 스터디 13주차: I/O (0) | 2021.09.02 |