계산기 과제 피드백
박혜빈
- 테스트 메서드에 given-when-then 주석으로 구분
- beforeEach구문 → beforeEach에 의존적인 테스트로 될 수 있다?
- 메서드 네이밍 규칙 → 첫시작은 소문자로 시작하는 카멜표기법을 사용해야한다.
- 에러 출력 메서드로 에러를 출력 → 에러 메시지를 ENUM을 만들어서 저장하는게 좋을 듯
- Scanner를 사용한 사용자 입력 테스트 → InputStream을 활용하여 테스트
- Runnable를 사용하는 이유 → thread safe하게 하기 위해서 사용
- Optional을 사용해도 될까요 → null로 처리해야 할 필요가 있다면 사용
이창호
- 괄호가 없는 연산만 처리하고 있다 어떻게 수정하면 좋을지 생각 → 스택 사용
- 의미없는 개행 문자 → PR할 때 포함하지 않는 것이 좋다.
- action 값이 1인 경우 검사하지 않아도 되지 않을까요? → 검사를 해야한다고 생각해서 그대로 두었다. → 문자가 들어올 경우 에러 발생 → 에러 처리 필요
- 수식을 체크하는 메서드 이름이나 리턴 형식이 바뀌어야 할 것 같다(typeFormula) → checkFormulaValidation & 리턴 값 boolean으로 수정
- i가 무엇을 의미하는지 모르겠다 → 변수명을 붙여서 해결
- action이 1, 2가 아닌 3이 들어오면 어떻게 될까 → 잘못된 입력값을 알려주는 메시지 기능 추가
- getResult 의 의미가 너무 광범위하다 → getArithmeticResult 로 변경
- list.add(formulaArr[target - 1]) → list.add(formulaArr[0])
- 0 / 2 = 0 → 예외처리를 하지 않아도 됨 → 예외처리 변경
- @DisplayName 을 사용하는 것은 좋은데 테스트의 목적과 기대 결과를 나타내는 문장이 있으면 좋을 것 같다. → 수정 완료
- assert문을 기대값 영역에서는 계산을 하지 않는 것이 좋다.
- 테스트 코드는 출력문이 아닌 assert를 사용하여 테스트해야한다. → assertEquals 사용
김성현
인터페이스 이름이 자바 컨벤션과 맞지 않음 → 인터페이스 이름을 CalculatorRepository로 바꾸고 구현체를 CalculatorRepositoryMap으로 바꿈
중복되는 코드 → 리팩터링으로 중복 제거를 할 수 있는 만큼 제거
gitignore 안했음 → 실수 ㅇㅈ
하나의 테스트 코드에는 하나의 기능만 테스트해라 → 하나의 테스트 코드 당 하나의 기능만 테스트하도록 쪼갬
메서드의 코드가 너무 길거나 중복되는 코드가 있다면 리팩터링(더 작은 메서드 단위로 쪼개기) → 코드의 기능이 길어진다 싶은게 있으면 private 메서드 단위로 리팩터링 진행
오류 메세지 정확하게 표현 → 콘솔 객체에서 오류 메시지를 구분하여 출력하도록 하였음 → 발표 보고 나니 잘못 짠듯 Exception을 받아서 instance of 처리하여 메시지를 각각 다르게 하는게 좋을듯
음수, 소수점 처리
음수 처리 완
- 소수점까지는 생각좀
이수연
- Basic 클래스 작성 - (a [+-*/] b) 만 계산 되는 클래스
- Verifier 클래스 작성 - 연산자(+-\*/)인지 아닌지 체크하는 유효성 검사 → 🤔 Verifier는 Console을 가지는게 아니라, boolean 만 반환하는 == 순수하게 검증만 하는 역할만 하는게 좋지 않을런지..? → exit 고치기
+ - * /
→ List가 좋을까요 아니면 다른게 좋을까요? (조회 성능 측면) → switch로 변경
- show라면 print를 해주는게 좋지 않을까요? → 메서드 이름 변경 완료
- 테스트 클래스는 보통 XXXTest 라는 이름으로 만들곤 합니다. → 변경 완료!
곽동운
계산기 피드백(by 멘토: 타일러님)
생성자에 동일한 console 객체를 두번 넘겨주고 있는데 이유가 있을까요?
Console 객체가 input과 output interface 둘다 구현하고 있어서 이렇게 넘기신것 같은데 이렇게 되면 input에서는 불필요한(?) output 관련 코드를 가지고 있고 반대로 output 에서는 input코드를 가지고 있게 되니 단일책임원칙에 위반(?)되는것 같은 느낌이 드네요 ㅎ
formula 와 answer의 validation은 필요 없을까요?
→ Console 받을때 검증이 필요한가?
→ ...
이 3가지 메소드의 차이가 어떤걸까요? 결국 무엇을 출력하는 것으로 보이는데 맨 아래 메서드로 활용할 수 있지 않을까요~?
이 경우(operator 가 잘못 들어온 경우로 보이는데) 사용자에게 응답 처리가 어떻게 되나요?
오류처리 필요
(띄어쓰기 차이) 인 경우는 어떻게 될까요?
덧셈() → test_1더하기2는3이된다()
@order(1)를 사용한 이유가 있을까요~?
- Input, Output 분리 해줘야 하는거 아닌가? → 메서드가 적어서 아직 분리하지않음
- 에러 메세지를 출력하는 함수들을 다 나누는 것 보다는 한 곳에 만드는게 좋을 것 같다. → printMessage 함수를 만들어줬음.
- printMemory 보다 좋은 이름이 없을까? ⇒ printStoredExpression 으로 변경
- 연산자 (+,-,/,*) 이외에 입력값이 들어올 경우 어떻게 되는가 ? → 예외처리
- 한줄코딩 하지 않기!
- 연속된 공백 ⇒ replace 사용 !
- 테스트 메소드명은 더 자세하게