Skip to content
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

[문자열 덧셈 계산기] 정재우 미션 제출합니다. #1

Open
wants to merge 116 commits into
base: main
Choose a base branch
from

Conversation

holyPigeon
Copy link

@holyPigeon holyPigeon commented Oct 18, 2024

header

✋ 코드 리뷰를 시작하며

리뷰하러 와주신 모든 분들을 환영합니다!
  • 최대한 직설적인 피드백을 부탁드립니다!
    저는 욕 먹는 게 너무 좋습니다. 망설이지 말고 여러분의 의견을 말해주세요!
  • 리뷰하면서 보여주고 싶은 영상이나 포스팅이 있으시다면, 링크를 공유해주세요!
  • 아래는 제 코드에 대한 소개입니다. 한 번 읽어보시거나, 건너뛰고 바로 리뷰해주셔도 좋습니다 😀

📦 패키지 구조

.
├── Application.java
├── config
│   ├── ApplicationConfig.java
│   ├── CustomDelimiterPattern.java
│   └── DefaultDelimiter.java
├── controller
│   └── CalculatorController.java
├── exception
│   └── ErrorMessage.java
├── model
│   ├── Calculator.java
│   ├── InputFilter.java
│   └── delimiter
├── validation
│   └── InputValidator.java
└── view
    ├── InputView.java
    ├── OutputView.java
    └── PrintMessage.java
  • 디렉토리는 기본적인 MVC 구조에 맞춰 크게 model, view, controller로 나누었습니다.
  • 그 외에 입력값 검증에 관련된 클래스는 validation, 전체 어플리케이션 설정과 관련된 클래스는 config 디렉토리로 뺐습니다.

🚀 기능 구현 목록

1️⃣ 사용자 입력

  • 우테코에서 기본 제공하는 Console API를 통해 사용자 입력을 진행합니다.
  • 입력값을 반환하여 InputFilter 객체로 전달한 후, 사용자 입력을 종료합니다.

2️⃣ 입력값 필터링

  • 원본 문자열로부터 계산기에 넣을 숫자를 뽑아내기 위해 가공을 진행합니다.
  • 먼저 커스텀 구분자가 있을 경우, CustomDelimiterProcessor 클래스를 통해 이를 따로 빼서 기존 구분자 목록에 저장합니다.
  • 커스텀 구분자 선언부를 제거하고 남은 문자열 속에서 숫자만 골라 분리해냅니다.
  • 분리 과정에서 다양한 예외 상황에 대해 검증 절차를 거칩니다.
  • 분리된 숫자들은 최종적으로 List 타입으로 반환, Calculator 클래스를 통해 계산됩니다.

3️⃣ 계산기

  • List 타입의 파라미터를 받아, 숫자들을 모두 더하여 반환합니다.

🤔 신경 쓴 요소

코드 리뷰 전에 참고해주시면 좋습니다!

✅ 읽기 쉬운 코드를 작성하기 위해 노력했습니다.

  • 패키지 구조, 변수 및 메서드 네이밍, 개행 등 다방면에서 코드가 쉽게 읽힐 수 있도록 노력했습니다.
  • 혹시 읽으면서 조금이라도 헷갈리거나, 갸우뚱한 부분이 있다면 거리낌 없이 리뷰로 알려주시면 감사하겠습니다!
    (특히 변수 & 메서드 네이밍 쪽 부탁드립니다..)

✅ 책임 분리를 위해 노력했습니다.

  • 최대한 한 클래스와 메서드에서 하나의 책임만을 가지도록 구현했습니다.
  • 한 클래스에 아무리 많아도 코드가 70라인을 넘지 않도록 했습니다. (CalculatorController만 74라인이네요...😂)

✅ 불변 개념을 적용하기 위해 노력했습니다.

  • 미션의 특성상, 구분자 목록이나 계산기에 입력될 숫자들에 변경이 가해지면 에러가 발생할 수 있습니다.
  • 의도치 않은 변경에 대비할 수 있도록 unmodifiableSet()을 활용하였습니다.

✅ 꼼꼼한 검증 과정을 거치려 노력했습니다.

  • 최대한 다양한 입력값을 넣어보며 검증 로직을 짰습니다.
  • ErrorMessage를 확인해보시면 제가 대비한 예외 상황들에 대해 확인하실 수 있습니다! 혹시 빠뜨린 경우가 있다면 조언 부탁드립니다 😀

사용자 입력 관련 클래스
계산 기능 관련 클래스 생성
덧셈에 사용될 숫자 목록 필드 추가
사용자 출력 관련 클래스
계산 관련 Model과 View를 관리하는 클래스
클래스의 필드로 있는 구분자 목록을 사용하면 되므로, 필요없는 구분자 목록 파라미터를 제거
input 필드 제거에 따라 기존에 생성자 내에서 진행됐던 전처리, 검증 로직들의 다수가 메서드로 이동
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants