우테코 7기 프리코스 1주차 회고

yesjuhee·2024년 10월 24일

우아한테크코스

목록 보기
3/5

1주차 미션 - 문자열 덧셈 계산기

✏️ 학습 목표

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

학습 목표에서 말해주듯, 1주차 미션은 문자열을 입력받아 구분자로 나눈 후 더한 값을 출력하는 아주 간단한 프로그램이었다.

1주차 미션 저장소

기능 요구 사항

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

  • 쉼표 , 또는 콜론 : 을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.
    • 예: ""0 , "1,2"3 , "1,2,3"6 , "1,2:3" ⇒ 6
  • 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//""\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
    • 예를 들어 "//;\n1;2;3" 과 같이 입력할 경우 커스텀 구분자는 세미콜론 ; 이며, 결과 값은 6이 반환되어야 한다.
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException 을 발생시킨 후 애플리케이션은 종료되어야 한다.

입출력 요구 사항

입력

  • 구분자와 양수로 구성된 문자열 + (커스텀 구분자)

출력

  • 덧셈 결과
    결과 : 6

실행 결과 예시

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

미션 진행 과정

예상했던 것보다 미션의 내용이 간단했기 때문에, 요구사항을 꼼꼼하게 파악하고 정리하는데 시간을 많이 썼다. 특히 1주차의 학습 목표가 개발 환경에 익숙해지는 것이었기 때문에 요구사항에 첨부된 컨벤션들을 정리하는 시간을 가졌다.

또한 Java 사용 경험은 있지만 그 경험이 아주 얕기 때문에 Java의 정석을 읽으면서 공부했다. 아직 완독은 하지 못했지만 프리코스를 무사히 완주 하면 최종 코테 전까지 완독을 하려고 한다. 공부하면서 배운 것을 정리하기 위해 하나의 주제를 읽고, 노션에 정리하면서 읽은 다음 어느정도 내용이 모이면 벨로그에 업로드 하는 식으로 공부를 했다. 확실히 그냥 읽는 것보다 스스로 정리하다보니 내가 아는 것과 모르는 것을 구분할 수 있고, 시간은 더 걸리지만 정확하게 학습하고 기억이 나지 않는 부분을 빠르게 확인할 수 있어서 좋았다.

미션 진행 중 고민했던 부분들

1) 기능 목록 나누기

과제 요구 사항 중 하나가 구현하기 전에 리드미 파일에 기능목록을 작성한 후 그 목록 단위에 맞춰 커밋을 하는 것이었다. 기능 목록을 나눌 때 어디까지 나눠야 할지, 또 어떤 형식으로 작성하는 것이 좋은 기능 목록인지에 대해 고민을 했다. 예를 들어 “구분자를 추출하는 것도 하나의 기능으로 볼 수 있나?”, “문자열 양식을 판단하여 예외처리하는 기능을 모든 케이스에 따라 나눠야 하나?” 같은 것들이었다.

여기에 정답은 없어보이지만, 기능명세서 작성하는 방식을 참고하기로 했다. 기능은 사용자가 이해할 수 있는 수준의 하나의 문장으로 표현하기로 했고, 기능명세서에서 하나의 기능으로 제공될 만큼 너무 작지 않은 사이즈의 기능으로 표현하고자 하는 나름의 기준을 세웠다.

2) 클래스 분리하기 (OOP)

객체 지향 설계에 대한 경험이 없는 상태로 미션을 진행하니까, 정말 간단한 미션인데도 설계가 쉽지 않다는 것을 느꼈다. 구현하고자 하는 기능은 명확하나, 이거를 어떻게 클래스로 분류해야 할지, 어떤 클래스에 어떤 기능을 줘야할지 경험이 없어서 어렵게 느껴졌다. 이 부분에 대해서 꼭 공부를 해야겠다고 다짐했다.

3) 애매한 요구사항의 처리

요구사항을 분석하고, 입력 형식을 파악하는데 많은 시간을 썼다. 특히 "\n" 이라는 것이 줄바꿈을 의미하는 것인지, \n 의 조합을 의미하는 것인지. 고민 끝에 줄바꿈이라면 줄바꿈이라고 표기했을 것이라고 생각을 해서 후자로 해석해서 처리했다. 또한 주어진 테스트코드를 뜯어봤을 때도 후자의 경우가 맞다고 판단할 수 있었다.

이 외에도 커스텀 구분자를 여러개 지정할 수 있는지, 그 방법은 무엇인지, 커스텀 구분자에 숫자를 쓸 수 있는지, 숫자에 실수는 포함이 안되는지 등등 많은 의문이 있었다. 가장 일반적으로 생각할 수 있는 것을 사용하자 하고 진행했다. 미션의 목적이 “요구사항의 미묘한 부분을 잘 파악하는 국어적 능력이 있는가!”가 아니라고 생각했기 때문에 이 부분에 너무 매몰되지 않으려고 했다.

이러한 “주관적인 해석이 가능한 기능”들에 대한 고민의 답은 1주차 공통 피드백 문서에서 찾을 수 있었다. 문서에 첨부되었던 공통 피드백 영상에서 구현하는 과정을 봤을 때 정말 “요구사항에만” 집중해서 하나씩 기능을 구현하는 방식을 사용했다. 즉 1순위는 기능 요구사항에 나온 기능들을 구현하는 것이고, 남는 시간에 예측되는 예외 케이스들에 대해 추가 기능을 구현하자는 기준을 세울 수 있었다.

마음가짐

여기서부터는 프리코스를 진행하는 동안의 가져야 할 자세에 대해서 생각한 부분에 대한 주저리주저리이다.

프리코스가 시작된 화요일에 디스코드에 접속했을 때 약간의 문화 충격(?)을 받았다. 이제 막 프리코스를 시작했는데, 스터디를 직접 모집하고, 공부 자료를 공유하거나 토론을 시작하신 분들을 보고 약간의 벽이 느껴졌다. 세상에는 정말 열정이 넘치는 사람이 많구나, 내가 저렇게는 되지 못하더라도 저런 사람들의 옆에서 좋은 영향을 받으면 좋겠다. 또 프리코스 과정이 진행되면서 나도 저렇게 성장하고 내가 많은 것을 나눌 수 있는 사람이 되고 싶다고 생각했다.

또 미션을 진행하면서 디스코드에서 MVC, TDD, OOP 등에 대한 이야기가 나왔다. 내가 생각했을 때 1주차 미션은 정말 간단한 구현이었는데 정말 다양한 이야기가 오가는 모습이 신기했다. 그러면서 "나도 저러한 것들을 공부하고 1주차 부터 적용해야하는 것은 아닌가?" "저런 사람들과 경쟁해서 내가 합격할 수 있을까?"라는 생각을 했다.

생각 끝에 내린 결론은 "전혀 걱정할 것 없다"였다. 입학 설명회에서 나왔던 코치 중 한 분이 "우테코는 같이 일할 사람을 뽑는게 아니라 성장해 나갈 사람을 뽑는 것"이라고 했던 말이 기억났다. 즉 프리코스 과정에서 "내가 얼마나 코딩을 잘 하고 지식이 많은지" 보여주는 것 보다는 "교육과정에 맞춰서 스스로 학습하고 성장할 수 있는지"를 보여주는 것이 중요하다는 결론을 내렸다. 이에 맞춰서 다른 어려운 기술을 쫓아가기 보다는 1주차의 학습 목표(개발 환경 익숙해지기, 프로그래밍 언어 사용하기)에 집중하고자 했다.

프리코스 과정이 불합을 가르는 "선발 과정"인 것은 부정할 수 없는 사실이지만, 그보다 더 중요한 것은 프리코스가 "학습 과정"이기도 하다는 것을 잊지 말자.

이러한 고민들을 정리하고 마음을 다지는데 확신을 주었던 포비님의 글을 첨부한다 ❣️

profile
https://yesjuhee.tistory.com/

0개의 댓글