Claire's Study Note

[TDD, 클린 코드 with Java] 미션과 상관없는 이야기

by Hi.Claire
반응형

🐣 TDD, 클린 코드 with Java 19기 (박재성, 넥스트스텝)

 

미션과 상관없는 이야기

지난주 목요일 첫 번째 라이브 강의가 끝난 후 5일동안 넥스트스텝에서 손을 놓고 있었다.

금요일은 밀린 집안일을 처리하고 또 카메라 찾아본다는 핑계로 공부를 안했고, 주말에는 김영한 자바 강의를 듣느라 바빴다.

사실 라이브 강의를 다시 동영상으로 제공한다는 점, 그리고 라이브 코딩 강의가 쪼끔 어려웠던 점도 한몫한 것 같다.

어려우면 회피하고 싶은 못된 마음이 드는데 이번엔 꼭 이겨내야 한다!

수강료를 생각하며 이겨내자!! 💸

80만원이면 내가 사고 싶은 카메라 중고로 살 수 있자나!!... 

그리고 무엇보다 박재성님이 예비낙오자가 된 나를 구제하기 위해 이런 메시지도 보내주셨다.🥹

왜 방준이처럼 혼자 알아서 스스로 미리미리 챡챡 하지 못하는거냐!!!

조금이라도 관심을 받아야 미션을 시작하는 관종병이라도 걸려버린걸까... 정신차리고 열심히 하자!

 

어쨌든 남은 한 달간 작심삼일을 10번 반복하자는 마음으로 다시 열심히 미션을 수행해보겠다.

 

미션1. 자동차 경주 - 단위 테스트

2단계 - 문자열 덧셈 계산기

https://edu.nextstep.camp/s/KIXpLZ6i/ls/s9PIIgE6

 

NEXTSTEP

 

edu.nextstep.camp

 

기능 요구사항

  • 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6)
  • 앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다. 예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
  • 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다.

 

프로그래밍 요구사항

  • 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다.

 

(소소한) TDD가 좋은 이유

구분자가 들어오지 않은 경우와 구분자가 들어온 경우의 로직을 분리해서 구현했는데 이 둘을 구분해야 하는지 헷갈렸다.

그래서 구분자가 들어오지 않은 경우의 로직을 주석 처리하고 테스트 코드를 돌렸더니 테스트에 통과했다.

TDD 덕분에 이 두 경우의 로직은 따로 구현하지 않아도 된다는 것을 쉽게 판단할 수 있었다!

        String[] strings = text.split("[,:]");

//        if (strings.length == 1) {
//            return Integer.parseInt(string);
//        }

        int result = 0;
        for (String s : strings) {
            result += Integer.parseInt(s);
        }

 

기능 요구사항 중에 음수를 전달할 경우 RuntimeException 예외가 발생해야 한다는 내용이 있다. (예 : “-1,2,3”)

  • 구글에서 “junit4 expected exception”으로 검색해 해결책을 찾는다.

Assert an exception is thrown Guide

 

입력값이 ","와 ":" 구분자로 들어온 경우뿐만 아니라 커스텀 구분자로 들어온 경우에도 체크해야 한다.

 

리팩터링할 때 참고할 내용

(참고) Clean Code Guide - 함수(메소드)

 

NEXTSTEP

 

edu.nextstep.camp

 

(참고) 엘레강트 오브젝트 - 메서드 이름을 신중하게 선택하세요

 

NEXTSTEP

 

edu.nextstep.camp

 

메서드를 분리하면서 메서드 이름을 지어야 하는데 참 어렵다.

빌더와 조정자에 대한 설명을 참고하자.

빌더(builder)는 명사, 조정자(manipulator)는 동사로 짓는다.

빌더는 뭔가를 만들고 새로운 객체를 반환하는 메서드로서 void를 반환할 수 없다.

조정자는 객체로 추상화한 실세계의 엔티티를 수정하는 메서드로서 반환타입은 void여야 한다.

반응형

블로그의 정보

Claire's Study Note

Hi.Claire

활동하기