저는 대학 4년동안 중간에 편입학을 했음에도, 첫 대학교 입학때나 편입학 이후나 모두 프로그래밍 관련 전공을 계속 유지했었습니다. 하지만 진로 탐색의 과정에서 개발자로서의 관심 개발 분야는 계속 바뀌었기 때문에 현재 진로로 선택한 지 1년 정도 된 웹 백엔드 개발자의 부족한 개발 지식을 채우고자 우아한테크코스에 지원하게 되었습니다.
우아한테크코스는 5기부터 모든 참가 인원에게 프리코스에 참여할 수 있는 기회를 주고 있습니다. 우아한테크코스의 프리코스는 총 4주간, 1주마다 하나씩 주어지는 미션을 수행하게 되며 프리코스를 통해 우아한테크코스에 합격했을 시 어떻게 학습을 진행하는 지 맛보기로 경험할 수 있는 기간이자, 합격하지 못하더라도 이 기간의 경험을 통해 프로그래밍 학습에 이러한 방법도 있다는 어떤 방향성을 제시해주고 있습니다.
저는 이러한 우아한테크코스 백엔드 6기에 지원하게 되어 프리코스에 참여하게 된 회고를 남겨보려 합니다.
[프리코스 1주차 미션 링크] https://github.com/woowacourse-precourse/java-baseball-6
[제출 코드 링크] https://github.com/woowacourse-precourse/java-baseball-6/pull/1075
프리코스 1주차
1주차 문제는 숫자 야구 게임입니다.
컴퓨터가 3자리 정답 숫자를 가지고 있으며, 유저가 3자리 수를 입력해가며 정답 숫자에 대한 힌트를 얻고 정답 숫자를 맞추는 게임입니다.
1주차 미션의 목표는 개발 환경을 세팅하고, GitHub에 익숙해지는 것입니다.
저는 프리코스에 참여하기 전 저는 우테코에 대해 알아보다가 발견한 우테코 5기의 ‘바톤’ 이라는 서비스를 체험해보았습니다.
바톤은 프리코스의 미션과 비슷한 방식의 문제를 내주고, 해당 문제를 구현한 후 코드리뷰를 받아보는 서비스입니다.
이 때 들었던 피드백들을 우선 지키고자 하며 구현했던 것 같습니다.
- 잘 알려진 코드 스타일 가이드를 따라 코드를 작성해보자.
- 커밋 단위를 세분화하자.
- 계층화나 디자인 패턴과 같은 것들을 명확한 기준을 가지고 사용하도록 하자.
- 객체를 객체답게 사용하자.
사실 계층화나 디자인패턴, 객체에 대해서는 크게 신경쓰며 학습해본적이 없었고 지식이 부족했기 때문에 이 피드백들을 듣고도 크게 와닿지는 않았었습니다.
그래서 우선은 코드 컨벤션에만 집중하며 코드를 짰습니다.
구현
우선 미션의 구현 자체는 크게 어려움이 없었기 때문에 구현부터 하고 리팩토링을 하기로 결정합니다.
첫 구현 코드는 MVC 패턴도 적용되지 않은 상태의 코드였기 때문에 대부분의 로직이 한 곳에 몰려있고 게임 흐름에 사용되는 객체들만 존재하는 상태였습니다.
그러다보니 각 메서드나 객체의 이름에 맞지 않는 역할들이 포함되어 있었고, 이를 중점적으로 수정하려고 노력했습니다.
이렇게 리팩토링을 거치면서 우테코 프리코스 커뮤니티에 공유해주는 글들을 보았고, 그 글들을 보면서 몰랐던 부분에 대해 학습하고 그 부분을 적용시키려고 하면서 코드가 발전했던 것 같습니다.
새롭게 학습한 부분
학습한 내용은 몰랐던 자바 문법 등등 많지만 가장 크게 영향을 미쳤던 부분의 학습을 기록해보고자 합니다.
객체지향 생활 체조 원칙에 대해서 전혀 모르고 있었는데, 이 원칙들을 지키는 것 만으로도 유지보수에 용이한 코드가 탄생하는데 큰 도움이 되는 것을 알았습니다. 이 원칙들을 지키려고 노력하다보면 메서드로의 분리나, 어떤 객체를 만드는 것을 자연스럽게 생각해보게 되는데 이 부분이 큰 도움이 됩니다.
일급 컬렉션에 대해서는 사실 몰랐는데, 코드를 짜고 글을 읽다보니 나도 모르게 일급 컬렉션과 비슷한 구조를 띄는 객체를 만들어 사용한 것을 보고 뿌듯했던 기억이 있습니다.
아쉽거나 적용시켜 볼만한 부분
- 객체지향 생활 체조 원칙을 지키는 데에 있어 놓친 부분이 많다.
- 원시 값의 포장에서 놓친 부분이나, else 예약어를 사용하지 않으려고 억지로 else if로 채운 부분 등이 아쉬웠다.
- 정규표현식을 적용시켜 입력 값에 대한 검증을 조금 더 간결하게 받아볼 수 있었다.
- Stream의 사용으로 간결해질 수 있는 부분들이 있는데 Stream과 친하지 않아 놓친 부분이 많다.
- 메서드 명이 명확하지 않거나 통일되지 않았다.
- ex) 어떤 부분은 validate, 어떤 부분은 validation 등등
- 일급 컬렉션을 적용시키면서 getter를 만들 때 불변 객체의 반환을 고려하지 않았다.
- 각 객체에 어울리지 않는 역할들이 존재했다.
- 컨트롤러에 결과 체크 로직이 존재하는 등의 문제.
소감
처음에는 기능 구현만이라도 잘 해보자라는 생각이었는데, 알게 되는 정보가 많아질수록 더 나은 코드를 작성하고 싶다는 욕심이 생겼습니다. 기능 구현을 해내는데에만 집중했던 것에서 애플리케이션의 설계가 얼마나 중요한 지 알게 되었던 미션이었습니다.
그리고 1주차임에도 활발한 프리코스 커뮤니티를 통해 여러 지식들을 얻을 수 있었습니다. 사실 학습을 하는데에 있어 요즘은 자료가 많기 때문에 문제가 없다고 생각할 수 있습니다. 하지만 커뮤니티를 통해 느낀점은 찾아볼 생각도 못했던 부분을 찾아볼 기회를 받을 수 있다는 것입니다.
내가 전혀 고려해보지 못한 부분에 대해 질문이 던져지면서 빠르게 성장할 수 있는 기회가 되는 것 같습니다.
앞으로 남은 미션을 통해 무엇을 더 배울 수 있을지 기대하게 만들었던 첫 미션이었습니다.