본문 바로가기
가치관 쌓기/개발 돌아보기

우아한테크코스Pro 프리코스 후기

by simplify-len 2021. 5. 17.

[PR 코드]

https://github.com/next-step/java-baseball-precourse/pull/351

 

[김정규] 프리코스 미션 제출합니다. by LenKIM · Pull Request #351 · next-step/java-baseball-precourse

프리코스 미션 제출합니다. README.md 에 구현할 기능 목록 리스트를 나열하고, 각 기능 목록을 구현하기 위한 테스트 목록은 Todo.md 에 작성하여 개발했습니다. 모든 기능 개발을 마치고, 테스트 코

github.com

https://github.com/next-step/java-racingcar-precourse/pull/224

 

[자동차 경주 게임] 김정규 미션 제출합니다. by LenKIM · Pull Request #224 · next-step/java-racingcar-precourse

메일에서 말씀해주신 것과 같이 불나는 코딩을 할수 있었던 경험을 할 수 있는 기회였습니다. Pull Request 를 통해 코드를 보시기 전에 사전에 보내주신 미션의 Rule(일급 콜렉션, 문자열 원시값 포

github.com

 

같이 TDD를 공부했던 지인분에게 우연히 우아한테크코스 Pro를 추천받았다.

가벼운 마음으로 시작하려고 했었다. 당연히 미션도 난이도가 높지 않다고 생각했다. 단, 지켜야할 Rule을 보기전까지는 말이다.

 

각각의 결과물을 직접 실행해보면, 결과물을 만드는데, 어렵지 않다는 사실을 빨리 알 것이다.

그러나 다음과 같은 Rule이 있다.

 

우아한테크코스-프로그래밍 요구사항

 

요구사항을 보면, intent가 한 개다. 무조건 한 칸만 가능하다. 이게 생각보다 생각을 많이하게 된다. 

 

나중에 알고보니, indent depth 를 하나로 허용하는 것은 Code complexity 와 관련이 있었다. [참고 사이트]

 

Code Complexity: An In-Depth Explanation & Complexity Metrics

By reducing code complexity, we can reduce the number of bugs and defects, along with its lifetime cost. We discuss cyclomatic complexity.

blog.codacy.com

 

그리고 단 한번도 작성된 메소드의 길이를 10라인을 넘지 않게 만드는 행위를 해보지 않아서 그런지 꽤 불편하게 다가왔다.

 

처음 프리코스 야구 게임을 할 때 위에서 말한 Rule을 지키면서 하니까, 어디 한 곳에 집중하기가 힘들었다. 그래서 코드를 내가 하고싶은 대로 작성 한뒤에 리팩토링을 통해서 위 Rule을 지키고자 했다. 한번 해보고 나니까- 그 뒤에 2번째 레이싱카 경주를 코딩할 때는 Rule이 손에 녹아서 불편하지 않는 경험을 했다.

 

메소드가 10줄이 넘지 않다보니, 무수히 많은 메소드들이 생겼다. 그리고 코드를 보는 내 눈도 이 많은 메서드를 보면서 혼란이 왔었지만, 가장 중요하다고 여겨지는 코드만 가장 상위에 놓고 위에서 아래로, 좌에서 우로 살펴보니 불편했던 혼란은 없어지는 매직이 일어났다.

 

 최근 TDD를 학습하면서도 이번 프리코스가 PlayGround 역할을 똑똑히 해주었다. 아쉽게도 Review Feedback은 없었지만 얻은 것은 있었다.

 

1. 생각의 전향

 줄곧 TDD 관련 서적을 읽더라도, 혼자 간단한 예제 프로젝트로 무엇가를 실습하는 것은 생각하리만큼 큰 도움이 되지 않았던 것 같다.이미 머리속으로 어떤 코드를 작성해야 되는지, 명확하게 알고 있어서 그랬던 것 같다. 그러나, 이번에는 어느 정도 규모가 있고, 작성해야 될 테스트 코드가 많은 자동차 경주 프로젝트에서는 프로덕트 코드가 보조코드가 되고, 테스트 코드가 메인 코드가 되는 경험을 할 수 있었다. 여전히 갈 길은 멀지만, TDD를 잘 활용하는 지인에게 들은 바, 테스트 코드가 메인 코드가 되는 생각의 전향이 필요하다고 했을 때, 크게 이해하지 못했었다.
 
 그래서, 이번 프로젝트를 진행하면서 이에 대해서 조금 더 경계하고, 테스트 코드를 먼저 작성하여 내가 생각하고 있는 방향을 마치 낙서장에 낙서하듯 작성하다보니- 생각의 전향을 할 수 있는 계기가 되었다.

2. 테스트 코드를 믿고, 리팩토링 하기

 주어진 요구사항을 처리하는 과정에서 생각보다 많은 리팩토링 Todo 가 만들어졌습니다. 제가 작성한 README.md 에 나중에 처리해야될 부분으로 따로 뒷부분에 작성했다.

 주어진 요구사항을 다 처리하고 난 뒤, 리팩토링을 하는 과정이 왔다. 테스트 코드를 믿고, 과감하게 리팩토링하는 저 자신을 발견하며- 만약 테스트 코드가 없었다면, 조바심에 보수적인 자세로 코드에 임했을 것이다.

3. 객체 지향 사고 키우기

 주어진 요구사항을 빠르게 처리하고 난 뒤, 저의 코드를 다시 살펴봤다. 그리고 생각했다. 내가 놓친 도메인이 무엇이 있을까? 잠자면서도 생각하고, 길을 걸으면서도 생각했다.
 
 레이싱 프로젝트에 관련해서 생각을 하던 중 Accelerator 라는 도메인 객체를 발견했다. Accelerator 의 구현까지 다시금 고민해보면서 '람다를 활용해보자'. 라는 생각까지 이르렀고, 소리없는 환호를 외쳤다. 평소의 개발이라면 이같은 행위가 없을 것이다. 그러므로, 이번 프로젝트를 진행하면서 객체 지향적인 사고를 다시한번 키울 수 있었던 기회가 아니었을까?

 

 

마지막으로, 우연인지, 다행인지, 모르겠지만 좋은 결과로 이어져- 합격했다. 금액을 지불하고 이제 9주간 즐거울 개발탐구생활을 할 것이다.

합격 결과 메일

 매주 받았던 피드백을 회고하고, 이를 블로그에 남겨보려고 한다.

 

갑자기 윈스턴 처칠의 명언이 떠올랐다.

"You, ever give up!""You, Never give up!" "you !, Never give up !!" 

댓글