티스토리 뷰

728x90

디프만이 끝나고, 다른 사이드 프로젝트를 계속 진행하고는 있지만...

역시 처음 디프만 지원할 때처럼 마찬가지로 주변에 같이 공부할 애가 없는 슬픈 상황이 반복됐다 ㅠㅠ

같이 공부할 사람도 별로 없고, 뭔가 목표가 없어서 나태해지는 거 같아서 동기 부여를 위해서 참여하게 됐다.

많은 후기에서 프리코스 만으로도 많은 성장이 된다고 해서 우테코를 선택하게 됐다 ㅎㅎ

 

📚 과제

🎯 학습 목표

  • Git, GitHub, IDE 등 실제 개발을 위한 환경에 익숙해진다.
  • 교육 분야에 맞는 프로그래밍 언어를 사용해 간단한 문제를 해결한다.

첫 과제라 그런지, 다른 참여자분들도 Git과 제출 관련 질문이 엄청 많았던 거 같다.

 

ℹ️ 진행 방식

  • 과제 진행 요구 사항, 기능 요구 사항, 프로그래밍 요구 사항 세 가지를 참고해 문제를 해결한다.
  • 요구 사항을 만족해야하고, 특히 기능 구현 전 기능 목록을 만들고, 기능 단위로 커밋하는 방식이다.
  • 기능 요구 사항에 기재되지 않은 내용은 스스로 판단해 구현한다.
  • 미션은 매주 화요일 오후 3시에 나오고, 다음주 월요일까지 구현해 제출한다.
    • 제출일요일 오후 3시부터 가능하다.
      • 정해진 시간을 지키지 않으면 미션을 제출하지 않은 것으로 간주한다.
      • 종료 이후 추가 푸시를 허용하지 않는다.

 

🎫 제출 방법

우테코 프리코스 - 계산기 레포를 포크해서 자신의 브랜치에서 구현 후 PR올리는 방식으로 진행됐다.

이후 PR 링크를 우테코 지원 플랫폼에 최종 제출하면 완료된다.

Java 버전은 21버전을 사용해야한다.

 

✅ 요구사항

기능

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

아래는 내가 정의한 요구사항이다.

  • 입력을 받습니다.
    • 구분자와 양수로 구성된 문자열입니다.
  • 숫자를 추출합니다.
    • 쉼표(,) 또는 콜론(:)을 가졌을 경우 분리해서 각 숫자를 추출합니다.
    • e.g) "" -> 0, "1,2" -> 3, "1,2,3"  -> 6, "1,2:3" -> 6
  • 쉼표와 콜론 외의 커스텀 구분자를 지정할 수 있습니다.
    • "//"와 "\n" 사이에 위치한 문자를 커스텀 구분자로 사용합니다.
    • e.g) "//;\n1;2;3"의 경우 커스텀 구분자는 세미콜론이며, 결과로 6이 반환됩니다.
  • 잘못된 입력은 IllegalArgumentException을 발생시키며 애플리케이션을 종료합니다.
  • 출력합니다.
    • 추출된 숫자의 덧셈의 결과입니다.

 

입력

  • 구분자와 양수로 구성된 문자열

 

출력

  • 덧셈의 결과
결과 : 6

 

예시

덧셈할 문자열을 입력해 주세요.
1,2:3
결과 : 6

 

 

😅 후기

부끄러운 나의 PR

맨 처음에는 매일 조금씩 해야겠다고 생각하고, TDD로 개발하고 싶었다.

어느때처럼 자소서, 코테, 면접 등 다른 일들이 추가되면서 많은 시간을 투자하지 못 했고, 결국 마감 2일 전 코드를 작성하기 시작했다.

초기 목표
1차 - 기능 구현(알고리즘 문제 풀 듯이 기본 요구사항 구현)
2차 - Test코드 작성
3차 - 역할에 맞게 계층과 클래스를 분리

 

원래 계획은 Application 클래스에 가장 간단한 구현을 한 뒤, Test 코드를 작성하고, 기능 단위로 함수를 나누려고 했다.

이후 역할에 따라 계층을 분리하고,  Test 코드를 작성한 뒤 객체지향적으로 클래스를 분리하려고 했다.

맨 처음부터 계층 나누고, 클래스를 분리하면 필요에 의해서 분리한 것보다 이유를 알지 못하고 '그냥 하는 게 좋으니까'라는 이유 밖에 생각할 수 없을 것 같았기 때문이다.

하지만, 실제로는 Application 클래스에 기능 단위로 함수를 나누는 것 까지만 진행했다.

 

그러면서 다른 참여자들이 벌써 PR을 올린 걸 보면서 많이 후회했다.

목표를 갖고 열심히 활동하고 성장하기 위해서 참여했는데 이렇게 된다면 얻어갈 수 있는 게 많이 없을 것 같았다.

다른 참여자들의 PR을 둘러봤는데, 제대로 TDD로 구현한 사람들도 있었고, 변수명과 상수 관리 등 간단한 부분들도 A-Z로 설계해서 구현한 부분을 보고 현타도 왔었다.

 

📝 Test 코드와 TDD

시간이 부족했던 문제가 가장 크지만, Test 코드가 없어서 시간이 남아 있었음에도 리팩토링을 시도하기가 어려웠다.

TDD로 하려고 했던 목표도 1차 구현 후 리팩토링을 위해 TDD를 해보고 싶었다.

현재까지 내가 생각했을 때 Test 코드의 가장 큰 효용 가치는 리팩토링 후에도 '이전과 같은 기능을 완료할 수 있음.'을 보장하는 것이라고 생각해서이다.

Test 코드를 미리 작성해뒀다면 조금 무리해서라도 리팩토링을 시도해봤을 것이라고 생각이 들기도 해서 아쉬웠다.

 

🖇️ 계층 분리와 역할에 맞는 클래스 분리

위와 마찬가지로 최종 목표는 계층을 분리하고 역할에 맞게 클래스를 분리하는 거 였다.

Delimiter와 Printer, Calulator 도메인을 분리하고, Controller 역할을 하는 객체와 비즈니스 로직을 담당하는 Service 객체로 나누고자 했었다.

이번에 하고 싶었던 건 도메인과 Service의 구분을 명확하게 알아보고 싶었다.

 

⚙️ CustomException

IllegalArgumentException 를 계속 코드에서 직접 발생시켰는데, 이 부분을 CustomException으로 분리해서 하나의 클래스에 관리했으면 좋지 않았을까? 라는 생각을 하고 있다.

 

🛠️ 컨벤션

구글 커밋 컨벤션과 자바 코딩 컨벤션을 지켜서 코딩을 해야 했었다.

기존에 코딩할 때는 계속 pre-commit을 사용해서 했어서 직접 컨벤션을 따라 손수 고치는 게 너무 귀찮았다.

pre-commit을 사용해도 되는 지를 모르겠어서 직접 했는데 뭔가 방법을 찾아봐야겟다는 생각을 했다.

(혹시 아시는 분 있으면 댓글로 써주시면 감사합니다...ㅎㅎㅎ 저도 알게되면 해당 글 수정해둘게요!ㅎㅎ)

 

 

확실히 Python으로 코딩을 접해서 그런지 함수지향적인 코드와 알고리즘 문제를 푸는 느낌으로 구현하는 게 편했다.

그러다보니 객체지향이 몸에 익지 않았고, 효율적으로 사용하지 못 하는 느낌이 많이 들었다.

 

그래서 확실하게 이번 우테코에서 목표는 객체 지향을 몸에 익히고 TDD를 시도해보는 것으로 하고자 한다.

 

제 발 미 리 미 리 하 자 ㅠ ㅠ

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함