본문 바로가기
회고이야기/우테캠 Pro3기

[1주차] 우테캠 Pro 3기 회고

by 사랑꾼이야 2022. 1. 2.
반응형

1주차 미션은 문자열 덧셈기와 로또를 구현하는 미션을 진행하였습니다.
진행해왔던 미션을 회고하면서 놓쳤던 부분들을 정리하려고 합니다.

문자열 덧셈기

기간

  • 미션 진행 기간 : 2021.11.02 ~ 2021.11.04

피드백 내용

메인 로직

기능 요규사항은 다음과 같습니다.

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

기능 요구 사항은 명확하였지만 실제로 정확하게 구현을 하지 못하였습니다. 문자열 계산기 값(, :)과 숫자 이외의 값이 들어온다면 예외로 발생처리를 해야 하는데, 이를 0으로 반환을 하니 마치 입력값은 제대로 입력하였지만 계산이 잘못된것처럼 구현을 하여서 피드백을 받았습니다.

또한 다음과 같은 피드백도 받았습니다.

요구 사항을 다음과 같이 분류해보겠습니다.

  • 기본 정책
    • 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열 분리
  • 그외 정책
    • 숫자 이외의 값
    • 음수값
    • 빈 값

그외 정책을 검증하여 모두 통과한다면 기본 정책을 통해서 예외 처리할지, 숫자의 합을 구할지 알 수 있기 때문입니다.

contains

기능 요구 사항 중 아래 목록이 있습니다.

쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열

그래서 해당 문자열을 분리하기 위해서 다음과 같이 개발을 진행하였는데 피드백을 받았습니다.

해당 부분은 다음과 같이 간단하게 사용할 수 있었습니다.

변경 전

if(str.contains(COMMA) && str.contains(":"))

변경 후

if(str.contains(",|:"))

contains에서 다음과 같이 사용할 수 있다는 점에서 다음에 활용할때 참고해야겠습니다.

매직 넘버

프로그램 코드안의 상수로 선언되지 않은 숫자를 매직넘버, 문자열을 매직 리터럴이라고 합니다.
코드안의 이렇게 상수로 선언되어 있지 않다면 의미 파악이 어려워지고 무슨 의미를 나타내는지 의도를 파악하기가 어렵습니다.
의도를 파악하기가 어렵기 때문에 의미를 파악하기 위해서 문서를 찾아보거나 또는 개발자에게 물어봐야 되는 작업이 필요합니다.
즉, 코드를 파악하기 위한 추가적인 비용이 발생하게 됩니다. 상수를 활용하여 적절한 네이밍을 붙여서 프로그램 코드안에서 그 의미가 전달되도록 해야겠습니다.

Pattern 인스턴스

값 비싼 객체인, 여기서 Pattern은 입력받은 정규표현식에 해당하는 유한 상태 머신을 만들기 때문에 인스턴스 생성이 높습니다.
그래서 값 비싼 객체를 인스턴스 초기화 과정 과정에서 직접 캐싱해 두고 나중에 이 인스턴스를 재사용할 수 있습니다. 이렇게 하면 개선전에는 몰랐던 Pattern 인스턴스를 static final 필드를 끄집어 내고 매직 리터럴을 통해 좀 더 의미 있는 코드를 만들어낼 수 있었습니다.

참고 자료

의미가 불분명한 매직 넘버를 상수로 선언하라.
아이템 6. 불필요한 객체 생성을 피하라

반응형

댓글