Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-calculator-precourse

입력한 문자열에서 숫자를 추출하여 더하는 계산기 구현

기능 요구 사항(미션 내용)

  • 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.
    • ex) "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6
  • 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다.
    • 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
    • 예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.

기능 분석

  • 문자열을 입력받아야 한다.

  • 입력받은 문자열에서 커스텀 구분자를 찾아야 한다.

    • 형식에 맞지 않는 문자열이 들어오는 경우 예외를 발생시킨다.
  • 문자열에서 커스텀 구분자를 제외한 수식 부분만 분리해낸다.

    • 형식에 맞지 않는 문자열이 들어오는지 validation 검사를 진행한다.
  • 분리해낸 문자열에서 숫자를 추출한다.

  • 추출된 숫자를 가지고 결과를 얻는다.

  • 계산 결과를 출력한다.

기능 분석을 하면서 헷갈리는 부분

  • 커스텀 구분자는 1개만 입력으로 주어질까?

    • "//"와 "\n" 사이에 위치하는 문자라고 했으니 문자 여러개를 커스텀 구분자로 지정해도 될 것 같다.

설계

콘솔 Application 이고 요구 사항이 복잡하지 않다. 단순히 PS를 한다는 생각으로 하나의 클래스에서 처리하는 것도 가능할 것 같다. 하지만 유지보수가 원활한 Application을 개발한다는 생각으로 Layered Architecture(MVC)를 사용하겠다.


Service

CalculatorServiceImpl

비즈니스 로직을 처리한다.


Controller

ConsoleController

프롬프트 사용자와 상호작용

  • run() : 프로그램 동작 흐름에 맞는 메서드를 차례차례 호출해준다.

Domain

ExpressionParser

구분자를 뽑아내고, Prefix를 제외한 문자열, 그리고 숫자들을 가지고 있는 클래스

ParsedExpression

Prefix 부분 커스텀 구분자를 제외한 수식

Delimiter

커스텀 구분자

ParsedNumber

숫자 리스트 컬렉션


View

UserView

사용자에게 보여질 데이터를 프롬프트에 출력해주는 클래스


DTO

UserExpressionDto

Controller로 부터 받은 데이터를 Service Layer로 전달하기 위한 DTO


AppConstants

상수를 별도의 클래스에서 관리한다


AppConfig

의존관계 주입을 위한 클래스이다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages