첫 수업 이모저모

  • 첫 수업은 2017-04-03 19:00:00 +0900에 시작됐다.
  • 회사의 동료 개발자들이 30명 정도 모여 수업을 듣는다.
    • 수강생들의 경력/기술 스택이 다양하기 때문에 건의사항을 제시하면 바로 반영될 것이라 한다.
    • 수업 시간은 19시~22시. 꽤 늦은 시간에 수업이 끝난다.
  • 단위 테스트와 리팩토링 논의.
    • TDD 방식은 개인적으로 좋아하고 즐기는 편이라 논의가 나와 즐거웠다.
  • 집에 가는 길에 박재성 교수님을 지하철에서 뵌 것 같은데 긴가민가 하다가 인사를 못했다!

첫 코딩 과제 : 문자열 계산기

요구사항

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

프로그래밍 요구사항

  • indent(들여쓰기) depth를 2단계에서 1단계로 줄여라.
  • depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다.
  • else를 사용하지 마라.
  • method가 한 가지 일만 하도록 최대한 작게 만들어라.

추가 요구사항

앞의 요구사항을 모두 만족하도록 기능을 구현할 경우 다음 요구사항을 추가적으로 도전해 본다.

  • 숫자 값을 위해 int과 같은 primitive type을 직접 사용하지 말고 자바 객체를 생성해 구현해 본다.
  • 문자열을 split하는 규칙이 현재는 기본 구분자와 custom 구분자 두 가지가 있다. 앞으로 문자열을 split하는 규칙이 계속해서 추가될 것으로 예상한다. 규칙이 추가되더라도 영향을 최소화하면서 확장 가능하도록 구현한다.
  • java 8에 추가된 람다를 활용해 위 요구사항을 구현해 본다.

첫 코딩 과제 후기

  • 내 구현 내용은 Github repository에 올려두었다.
  • else를 쓰지 않고, 가급적이면 인덴트를 적은 depth로 유지하는 것은 내가 선호하는 스타일이기도 하다.
  • 패턴 생각하지 않고 직감에 따라 찬찬히 구현했는데 꽤 즐거웠다.
  • 규칙 추가와 변경 가능성을 가장 중요한 조건으로 자의적으로 판단하고 작업했다.
  • 추가 요구사항 중 primitive type을 사용하지 않는 건 pass 했다.

Links