[우아한테크코스]지원과 프리코스 까지 후기

지원


"성장 할 수 있는 10개월 이다"  우아한 테크코스 속에서 보낸 10개월이 내 인생에 꾸준하게 긍정적인 영향을 미칠 것 같다는 생각이 들었다. 아니 확신이 들었다.

 

 

인트로에 나오는 문구하나하나가 성장세포를 깨우는 느낌이 들었다. 3시간 정도되는 영상을 시청하고 드는 생각은 지금 당장 바로 지원하자 였다. 그렇게 나는 우아한 테크코스 지원에 한발짝 다가가게 되었다.

 

 

코딩테스트


2020년 11월 7일 12시부터 16시 까지 4시간 동안 총 7문제를 풀었다. 나는 주로 알고리즘 공부를 할 때 사용했던 언어인 python3를 사용하여 코딩테스트를 보았다. 

 

문제를 읽고 코드로 구현해서 해결 할 수 있는 기본능력을 보는 것 같았다. 구현을 한 뒤, 테스트 케이스가 2~3개 밖에 주어지지 않아 제출을 한 뒤에도 실수가 있는지 몇 번을 다시 보았던 것 같다.

 

6,7번이 난이도가 높았다고 생각이 되었다. 7번먼저 풀다가 시간을 많이 써버려서 1-5번을 남은 시간에 다 풀었지만 6번은 제출을 하지 못하였다. 그렇게 코딩테스트에서 총 6문제를 풀었다. 

 

그리고 우아한테크코스 1차에 합격 메일을 받게 되었다! 

 

대망의 프리코스


 

어떻게 보면 우아한 테크코스로 가기까지의 한 관문이라고 할 수 있는 "프리코스"에 도착했다. 3주 동안에 걸쳐 과제를 수행한다는 점에서 색달랐다. 이제 프리코스의 막바지를 달리고 있는 지금 나는 이 프리코스가 아주 좋은 경험이라고 자부 할 수 있다. 좋은 가이드 대로 과제를 수행하면서 진행 할 때마다 "어제의 나와 다르다!" 라는 것이 느껴졌다. 프리코스를 하면서 느낀 점들을 자세히 풀어내 보려고 한다.

 

1주차

 

설레는 마음으로 프리코스를 시작 하였다. 1주차 미션은 숫자야구 게임을 만드는 것이었다. 이번 미션에서는 아래 질문에 대해 고민해 보면서 많은 것을 느끼게 되었다.

 

"모든 원시값과 문자열을 포장했는가?" 

 

 처음에는 게임 진행을 담당하는 컨트롤러를 하나 생성하여 그 곳에서 숫자야구게임 입력 값에 대한 유효성 체크를 하게 하였다. 

 

그러나 위의 물음에 대해 고민을 해보고 BaseBallGameNumber객체로 숫자야구게임의 입력값을 포장하여 사용하도록 변경하였다. 해당 입력값의 유효성 검사 또한 객체가 생성될 때 진행 하도록 하였다. 

 

이전에는 숫자야구게임 진행에 사용되는 값들이  inputNumber와 answer가 따로따로 존재하듯이 느껴졌는데, BaseBallGameNumber로 포장을 하고 나니 '야구게임에서 쓰이는 숫자'로 의미가 명확하게 다가왔다. 

 

설레는 1주차 간단하게 구현할 수 있는 과제라고 하셨지만 그 안에서도 많은 것을 배울 수 있었다.

 


2주차

 

2주차에는 자동차 경주 게임을 구현하는 미션이 주어졌다. 2차미션은 1주차 미션에서 "클래스 분리"를 목표로 진행된다고 전달 받았다. 

 

그래서 2주차에는 어떻게 클래스 분리를 하면 좋을지에 대해 많은 고민을 한 것 같다. 구현을 시작하기 전에 자동차 경주가 펼쳐지는 하나의 공간을 생각하면서 필요한 객체들을 추려 내었다.

 

  • 경주가 펼쳐지는 공간인 Stadium
  • Stadium 에서 펼쳐지는 경주 Race
  • 자동차의 접수를 받는 ReceptionDesk
  • 경기에 대한 진행 사항을 나타내는 ScoreBoard

경주를 진행하기 위한 객체들은 위와 같이 생각해 내었다. 그러나 2주차의 미션이 클래스 분리 인 만큼 어떤 클래스들이 더 필요할 까 추가적으로 고민 해 보았다.

 

1주차 때 배웠던 '모든 원시값과 문자열을 포장했는가'에 맞춰 입력 받은 자동차 전진 진행횟수를 'Round'로 포장하였다.

또한 우승 조건, 전진 조건을 하나의 클래스로 만들었다.

 

  • Round
  • MoveCondition
  • WinnerCondition

2주차에 공부를 하며 추가적으로 알게된 것은 '일급 컬렉션' 이라는 개념이었다. 위에서 언급했던 "모든 원시값과 문자열을 포장했는가?"에 대해 자료를 조사하다가 알게 되었다. 소트웍스 앤솔로지 객체지향 생활체조편에 등장하는 개념이다.  

 

일급 컬렉션이란 - 하나의 콜렉션을 유일한 필드변수로 가지고 있는 클래스

 

이번 미션에서는 자동차 경주에 참여하는 Car객체들을 관리해야 한다. 또한 하나의 Round 마다 경주에 참여한 Car들은 move라는 행위를 수행 해야 한다. 나는 이러한 구현 사항들에서 일급 컬렉션을 사용하면 좋을 것 같다고 생각을 하게 되었다.

 

일급 컬렉션의 장점은 아래와 같다.

 

  • 일급 컬렉션은 자료의 불변성을 보장한다.
  • 일급 컬렉션은 자료를 검증해 저장한다.
  • 일급 컬렉션은 상태와 행위를 한 곳에서 관리 한다.

 

몰랐던 개념에 대해서도 공부를 하고 객체 지향에 대해서도 많은 생각을 해볼 수 있었던 2주차 였던 것 같다.

 


3주차

 

3주차에서는 TDD를 한번 도입 해 보기로 하였다. 우아한 테크코스에 관한 자료들을 찾아보면서 TDD라는 개념을 많이 접했다. 말은 많이 들었지만 잘 사용해 본적이 없어서 1,2 주차 때에는 망설여 졌었다. 하지만 3주차 까지 도착한 지금 TDD 방식으로 프로그램을 짜보면 좋겠다 나는 할 수 있다! 라는 자신감이 생겼고 TDD를 도입하여 구현을 시작하게 되었다.

 

그리고 3주차에는 2주차 과제 피드백으로 받은 "비즈니스 로직과 UI 로직을 분리해라" 에 초점을 맞춰 구현 해보도록 하였다. 저번 1,2주차 때 UI로직과 비즈니스 로직을 분리하지 않고 구현을 했던 것 같았다. 이것을 수행하기 위해 MVC라는 패턴에 대해 알아보았고 적용해 보도록 하였다.

 

3주차 미션은 지하철 노선도를 관리하는 프로그램을 만드는 것 이었다. 1,2주차에 비해 훨씬 복잡한 프로그램 이었다. 복잡한 프로그램 이었는데도 처음 접한 방식인 TDD로 구현한게 오히려 도움이 되었다. 

 

우아한 테크코스의 프리코스를 진행하면서 처음에 미리 구현해야할 기능을 정리한다. 구현을 진행하기 전 이니 구현을 하다가 다시 생각해야 할 부분들도 나온다. 프로그램의 복잡도가 높아 질 수록 이러한 상황을 마주할때는 머리가 지끈 할 것이다. 

 

그런데 TDD 방식으로 테스트코드를 먼저 작성한 후 구현을 하니 예외 사항들에 대해 더 많이 고민하게 되었다. 구현을 시작하기 전에 테스트 코드를 작성하면서 Readme파일의 구현해야할 기능 목록을 많이 바꾼 것 같다. :-)

 

3주차는 UI로직을 구현하는데 많은 시간을 쏟은 것 같다. 

 

각 View 마다 Menu에 관한 정보를 가지는 HashMap을 가지고 있도록 구현 하였다. 이렇게 구현하니 메뉴의 순서가 보장이 안되어서 LinkedHashMap을 사용하였다.

 

그리고 이번에는 MVC 패턴을 적용해 보도록 하였는데, 각 View들 마다 Controller를 만들어 주어 Model(Repository)에 접근하도록 하였다. 

 

View는 User의 input을 Controller에 전달하는 역할만 하고 도메인 객체를 생성하여 Repository에 전달하는 것은 Controller를 통해 수행하도록 하였다.

 

View에서 Repository에 있는 데이터를 그대로 보여주는 작업을 수행할 경우에는 Controller를 거치지 않고 Repository에서 데이터를 꺼내 사용하도록 구현하였다.

 

 

결과

댓글



Designed by JB FACTORY