Skip to content

2025년 우아한테크코스 웹 백엔드 8기 1주차 미션

Notifications You must be signed in to change notification settings

LightPlu/java-calculator-8

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-calculator-precourse

🪜 기능 요구 사항 구현 과정

확인해야할 구현 LIST

- 사용자에게 문자열 입력받기 구현

- 문자열 올바른지 확인 로직 구현

- 구분자와 숫자 분리 로직 구현

- 올바르지 않는다면 에러 던지기 구현

- 숫자 더하는 계산기 구현


(의문점이 생기기 전 구현 과정)

1. 입력받을 문자열 클래스를 생성한다.

2. 입력받은 문자열에서 입력받은 구분자와 숫자를 분리하는 클래스를 생성한다.

3. 숫자를 합산하는 계산기 기능을 가진 클래스를 생성한다.

4. 사용자에게 입력을 받고, 계산기를 활용하여 올바른 출력값이 나오도록 main 메서드를 구현한다.

5. 사용자가 잘못된 입력값을 입력할 경우 IllegalArgumentException 발생 후 애플리케이션 종료를 구현한다.

6. 테스트 코드 작성 후 테스트가 잘 돌아가는지 확인한다.

(의문점 해결 완료 후 구현 과정 재구성)

1. 입력받을 문자열 클래스를 생성한 후 해당 클래스에 입력받은 문자열의 구분자와 계산해야하는 숫자를 분리하는 로직을 구현한다.

2. 입력값에 에러가 존재하는지 검증하는 로직, 에러가 존재한다면 IllegalArgumentException을 발생시키는 로직을 구현한다.

3. 숫자를 합산하는 계산기 기능을 가진 클래스를 생성한 후, 입력받은 문자열의 숫자들을 더하는 로직을 구현한다.

4. 사용자에게 입력을 받고, 계산이를 활용하여 올바른 출력값이 나오도록 main 메서드를 구현한다.

5. 테스트 코드 작성 후 테스트가 잘 돌아가는지 확인한다.

(과제를 진행하며 바뀐 구현 과정)

1. 입력받을 문자열 클래스 UserInputDto를 생성한다.

2. 정규 표현식을 사용하여 입력값을 검증하고 숫자 부분과 구분자를 반환하는 로직을 구현한다.

3. 넘겨 받은 숫자 부분과 구분자를 이용하여 숫자 계산을 하는 계산기 기능을 구현한다.

4. main 메서드 전체 로직을 구현한다.

5. 테스트 코드 작성 후 테스트가 잘 돌아가는지 확인한다.


💡README 작성 과정에서 생긴 의문점

  • 과연 사용자에게 입력받을 문자열을 따로 클래스로 관리해야할것인가?
    • 클래스로 관리를 하지 않고 main메서드에서 변수로 간단하게 구현이 가능하다. 클래스로 관리를 한다면 확장 가능성에 대해 유연하게 반응할 수 있고 해당 클래스 내에서 숫자를 분리하는 로직을 구현 가능하기 때문에 이번 주차 과제에서는 사용자에게 입력받을 문자열을 클래스로 분리하여 관리하려고 한다.
  • 에러를 처리하는 과정에서 main 메서드에서 처리할 것인가 아니면 따로 에러헨들링 클래스를 만들어서 처리할 것인가?
    • 에러도 동일하게 클래스로 관리를 하지 않고 main메서드에서 try-catch문으로 에러 핸들링이 가능하다. 하지만 클래스로 에러핸들러를 관리한다면 어떤 에러가 발생했는지 로직을 구현하여 정확한 메세지를 설정할 수 있다. 하지만 이번 주차 과제에선 기능 요구 사항에 적혀있듯이 사용자가 잘못된 값을 입력하면 IllegalArgumentException을 발생시킨 후 애플리케이션을 종료되어야 한다고 하여 입력값을 확인하는 과정에서 이상이 있다면 IllegalArgumentException을 발생시키고 끝내려고 한다.
  • 입력받는 문자열을 단순히 String으로 처리할 것인가, Queue로 처리할 것인가, 배열로 처리할 것인가 어떤것을 선택하는 것이 좋을까?
    • build.gradle파일을 보면 의존성에 존재하는 우테코 라이브러리를 확인할 수 있는데, 해당 주소로 들어가 소스코드를 확인해본다면 사용자 입력을 받을 때 사용하는 Console.readLine() 메서드는 String타입을 반환하는 것을 알 수 있다. 따라서 입력받는 문자열은 String타입으로 처리하는것이 문법적으로 올바르다고 생각된다.

과제를 진행하며 느낀 것

  • 객체라는 관점에서 입력값을 받아오는 클래스에 구분자, 숫자 등 다양한 것들을 멤버변수로 만들어서 구분자를 분리하고, 숫자 부분을 분리하는 로직을 통하여 변수에 저장해두고 로직마다 필요할 때 해당 객체에서 꺼내서 사용하려 했는데 굳이 이렇게 저장해두고 사용해야하나? 라는 의문점이 생김. 뭔가 코드가 더 더러워진다는 느낌을 받았음
    • 위 방식을 해결하기 위하여 굳이 저장하고 꺼내서 사용하지 말고 구분자와 숫자 부분을 구분하고, 계산하는 과정을 서로 체인처럼 연결되도록 구현하려고함

About

2025년 우아한테크코스 웹 백엔드 8기 1주차 미션

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%