-
Notifications
You must be signed in to change notification settings - Fork 156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[4기 - 박은지] 1~2주차 과제: 계산기 구현 미션 제출합니다. #136
base: Eunji
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
계산기 과제 고생하셨습니다! 시간이 여유로워서 천천히 확인했습니다. 최대한 아는만큼만 의견 달아보겠습니다! 틀릴수도 있습니다 ..ㅎ
아직 네이밍이나 기본적인 부분만 리뷰했습니다. 고치시면 추가적으로 더 확인하도록 할게요.
그리구
1 + 3 * 4 / 2 - 1
결과 : -0.16666666666666674
이 결과가 이상하게 나오네요 .. 계산 로직 수정 부탁드립니다!
- OOP를 잘 지키고 있는지, 한 곳에 너무 많은 역할들이 몰려있는지 궁금합니다!
- 처음 하신것 치곤 좋다고 생각합니다! 나중에 더 메서드를 잘게 나눈다거나, validation을 메서드로 뺀다거나 하는 방향으로 생각하시면 좋아보입니다
- 테스트 코드를 따로 작성해본 경험이 없어서 어떻게 작성해야 하는지 감이 잘 잡히지 않습니다🥲 테스트 코드를 작성에 관한 자료를 찾아보는 중인데, 혹시 이 부분에 대해 미리 피드백을 주실 부분이 있으시다면 남겨주시면 참고하여 작성하겠습니다!
- 저는 처음엔 김영한님 강의를 봤구, 이후엔 여러 사람의 테스트코드나 책을 통해 확인했습니다. 힘드시면 나중에 말씀해주세요!
- 실패 테스트까지 작성해주셨으면 좋겠습니다
- 코드를 작성하면서 커밋을 어느 시기에 해야할 지 잘 모르겠습니다. 예를 들어 한 클래스에서는 메소드명을 하나 수정하고, 다른 클래스에서는 코드를 개선했다면, 이런 상황에서는 코드 개선에 관한 내용으로 묶어서 하나의 커밋을 작성하는 것이 좋을지, 아니면 메소드명과 코드 개선한 것을 따로 커밋을 작성하는게 좋을지 궁금합니다!
- 커밋 같은경우는 나중에 협업할 땐 기능별로 하지만 개인 커밋변경사항 같은 경우는 자유롭게 하시면 됩니다. 나중에 git branch 전략 한 번 확인해주세요
- 저는 일반적으론 특정 기능 기준으로 완료시에 커밋하는 편입니다.
- 아직 예외 처리에 대한 코드를 작성하지 못했는데, 예외를 한 곳에서 모아 처리하는 것이 좋을지, 예외가 발생한 곳에서 각각 처리하는 것이 좋을지 궁금합니다!
- �어떤게 좋은지는 애매하지만, 모아서 처리한다면 한 곳에서 에러를 관리하여 편해지지만 구체적으로 어디서 발생했는지 확인하기 힘들수도 있다고 생각합니다. 트레이드오프라고 생각하기 때문에 자유롭게 해주시면 좋을것같아여.
src/test/java/CalculatorTest.java
Outdated
@@ -0,0 +1,32 @@ | |||
import org.assertj.core.api.Assertions; | |||
import org.example.Calculator; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import가 잘못됐습니다
src/test/java/CalculatorTest.java
Outdated
import org.junit.jupiter.api.Test; | ||
|
||
|
||
public class CalculatorTest { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
패키지는 일반적으로 다른 패키지의 접근이 필요없어 class만 쓰는경우가 많습니다!
Output.showMenu(); | ||
|
||
switch (Input.inputMenu()) { | ||
case 1: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
매직넘버를 최대한 사용하지 않는 방향으로 부탁드립니다! 매직 넘버는 따로 검색하면 나오니 한 번 찾아보시면 좋을것같아여
case 3: | ||
return; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
default로 1,2,3 이외의 입력을 했을때의 default도 있었으면 좋겠습니다! 오류처리나 간단한 출력이라도 괜찮을것같아여
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
|
||
public static Integer inputMenu() throws IOException { | ||
return Integer.parseInt(br.readLine()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
숫자 이외를 입력 시 예외처리가 필요해보입니다! 입력 후 Integer.parseInt 하기 전이 좋아보이네요
return stack.pop(); | ||
} | ||
|
||
public List<String> seperate(String[] formula) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 separate 일까요?
List<String> list = new ArrayList<>(); | ||
Stack<String> stack = new Stack<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기도 의미있는 이름이면 좋겠습니다!
MULTI("*", (num1, num2) -> num1 * num2), | ||
DIV("/", (num1, num2) -> num1 / num2); | ||
|
||
private final String operator; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Enum 이름이랑 다른 이름을 사용해주세요
|
||
public class History { | ||
|
||
private Map<Long, Formula> map = new LinkedHashMap<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- LinkedHashMap을 사용 한 이유가 있을까요?
- 해당 자료구조 같은 경우는 런타임시에 한 번 생성되고 변경되지 않아보여 static final 붙이는걸 추천드립니다.
- 의미있는 이름으로 바꿔주세요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
키를 순서(번호), 값을 수식을 받아 순서를 보장해 저장하기 위해 LinkedHashMap을 사용했습니다 !!
src/test/java/CalculatorTest.java
Outdated
@Test | ||
@DisplayName("곱하기") | ||
void multiply() { | ||
Assertions.assertThat(Calculator.multiply(6, 2)).isEqualTo(12); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
static으로 Assertions를 빼시면 좋아보입니다.
✅ 피드백 반영사항
예외 처리와 테스트 코드 작성 부분은 진행 중입니다! 👩🏻💻 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다! 저는 더 깊게 안하고 여기까지만 피드백 하겠습니다
final int HISTORY = 1; | ||
final int CALCULATE = 2; | ||
final int EXIT = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
접근제한자를 안 붙인 이유가 있을까요?
또 만약 런타임중에 변경되지 않는다면 static도 찾아보시면 좋을것같아요
�과제하느라 고생하셨어요. 코드를 읽기 쉬웠고, 객체에 역할 부여를 너무 과하지 너무 한곳에 몰려있지도 않은거 같아요.
|
📌 과제 설명
✅ PR 포인트 & 궁금한 점