Skip to content

Conversation

@ChanYongYong
Copy link

✅ 요구 기능 목록
숫자 추출 및 합산
쉼표(,) 또는 콜론(:)으로 구분된 문자열 처리
예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6
커스텀 구분자 지원
문자열 앞부분의 "//"와 "\n" 사이의 문자를 구분자로 사용
예: "//;\n1;2;3" => 결과 6
입력 오류 처리
잘못된 입력에 대해 IllegalArgumentException 발생
입출력 요구 사항
입력: 사용자에게 "덧셈할 문자열을 입력해 주세요." 메시지 출력
출력: "결과 : {계산 결과}"

🛠️ 구현 내용

빈 문자열 처리

빈 문자열을 입력받았을 때 예외를 발생시키도록 구현

if (input == null || input.trim().isEmpty()) {
    throw new IllegalArgumentException("빈 문자열은 계산할 수 없습니다.");
}

사용자 입력 프롬프트

사용자에게 입력을 요청하는 메시지를 추가

private static final String PROMPT_MESSAGE = "덧셈할 문자열을 입력해 주세요.";

결과 출력 형식 지정

계산 결과를 특정 형식으로 출력

private static final String RESULT_FORMAT = "결과 : %d";

계산 로직 구현

문자열 파싱 후 합산하는 로직 추가

String[] numbers = delimiterHandler.parseAndSplitInput(input);
return sumNumbers(numbers);

입력 파싱

기본 구분자 및 커스텀 구분자를 지원하는 로직

if (input.startsWith(CUSTOM_DELIMITER_PREFIX)) {
    int newlineIndex = input.indexOf(LINE_SEPARATOR);
    if (newlineIndex == -1) {
        throw new IllegalArgumentException("잘못된 구분자 형식입니다.");
    }
    String customDelimiter = input.substring(CUSTOM_DELIMITER_PREFIX.length(), newlineIndex);
    delimiters = customDelimiter + delimiters;
    numbersPart = input.substring(newlineIndex + 1);
}

잘못된 입력 처리

음수나 잘못된 숫자 형식에 대한 검증 추가

if (number < 0) {
    throw new IllegalArgumentException("음수는 허용되지 않습니다: " + number);
}

입력 처리

Console API를 활용하여 사용자로부터 문자열 입력 받기

String userInput = inputHandler.getInput();

후기

이전에 했던 코딩에서는 저 혼자 코드를 작성하고 혼자 코드를 보기 때문에 함수 분리, 함수명, 기능마다 클래스 분리를 생각하며 코드를 작성하지 않았습니다. 이번에 했던 코딩에서는 OOP의 기초를 학습하는 좋은 계기가 되었습니다.
테스트 코드를 사용해본적이 1번 뿐이였습니다. 어떻게 테스트를 해야 할지도 막막했습니다. 때문에 테스트는 뒤로 미루고 기능 구현에 몰입했습니다. 테스트를 거치지 않고 작성을 하다보니 중간중간 오류가 좀 많아서 시간이 많이 소모 되었습니다.
기능이 거의 구현이 되었을때 테스트를 도전해보았고, 이로 인해 빈 문자열에서 오류를 발견했습니다. 테스트 코드로 오류를 찾는것이 확실한 방법이며, 시간을 단축 시킬 수 있다는 중요성을 이번에 깨닫게 되었습니다.

성장한 점

이번 과제를 통해 함수형 프로그래밍에서 객체 지향 프로그래밍으로 한 걸음 나아갔다고 생각합니다.
어떻게 해야 유지보수, 확장을 할 때 조금이라도 편하게 코드를 작성할 수 있을까 고민을 많이 하는 시간을 가졌습니다.
기능의 순서, 결합도, 함수명, 클래스를 어떻게 나누냐에 따라 정말 많은 차이가 있다고 생각하고 있고, 처음 기능을 readme에 적을 때 더 많은 시간을 가졌어야 했다고 생각이 듭니다.
다음 기능 구현에서는 좀 더 세분화 하고, 자세한 기능 목록을 나열할 것입니다.

향후 계획

객체 지향 프로그래밍에 대한 이해와 관심이 깊어졌습니다.
앞으로의 챌린지에서도 프로젝트를 진행하며 이론을 실무에 적용해려 합니다.
또한, 테스트 주도 개발(TDD)이나 디자인 패턴 같이 이론으로만 알고 있던 컨셉또한 구현해보려 합니다.
또한 코드를 작성하며 LLM을 많이 사용하게 되었는데, 객체지향적으로 코드를 짜는것은 LLM이 아직 완벽하게 구상할 수 없다고 생각을 합니다.
따라서 저는 객체지향적인 코드를 작성하도록 노력하여 대체될 수 없는 개발자가 될 것입니다.

ChanYongYong and others added 9 commits October 20, 2025 01:12
Added feature list for the Java calculator project.
- InputHandler 클래스 추가
- Console.readLine()을 사용하여 사용자 입력 받기
- 커스텀 구분자 처리를 위해 "//"와 "\n" 제거 (extractNumbersPart)
- 입력 문자열에서 기본 + 커스텀 구분자 추출 (getDelimiters)
- 숫자 부분을 구분자를 기준으로 배열로 분리 (splitNumbers)
- Application에서 사용자 입력을 받아 StringCalculator로 계산 후 출력
- StringCalculator에서 DelimiterHandler를 사용하여 커스텀/기본 구분자를 처리하고 숫자 합산
- 음수 입력이나 잘못된 숫자 형식에 대해 IllegalArgumentException 발생 처리
- 계산 결과 출력 기능을 ResultPrinter로 이동
- 오류 메시지 출력 기능을 ResultPrinter로 구현
- Application에서 직접 출력하던 코드 제거 후 ResultPrinter 사용
- extractNumbersPart와 getDelimiters를 parseInput으로 통합 (항상 같이 동작)
- ParseResult 레코드 도입으로 구분자와 숫자 부분 함께 반환
- splitNumbers에서 한 번의 파싱으로 구분자 처리 및 숫자 분리 수행
- DelimiterHandler의 splitNumbers를 parseAndSplitInput으로 변경 (의도 명확화)
- InputHandler에 printPrompt 메서드 추가하여 입력 안내 메시지 출력 기능 구현
- calculate 메서드에서 숫자 합산 로직을 sumNumbers로 분리
- 문자열을 양수 정수로 변환하는 로직을 parseToPositiveInteger로 분리
- StringCalculator, DelimiterHandler, Application 등 주요 클래스에 주석 추가
- 기능별 역할과 동작 방식 설명
- 기본 동작 및 예외 처리에 대한 단위 테스트 코드 작성
- 코드 가독성과 유지보수성 향상
@ChanYongYong ChanYongYong changed the title Chan yong yong [문자열 덧셈 계산기] 배찬용 미션 제출합니다. Oct 20, 2025
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.

1 participant