우아한 테크코스/회고

[우테코 프리코스 회고] 1주차를 마치며


1주간의 프리코스, 설레기도 하고 어렵기도 했던 1주간이 지났다.

한주간 정말 치열하게 살았다고 생각한다.

질문에 답변을 하고, 계속해서 문제해결을 하며 살아남는 사람들이 갖고있는  
가장 큰 강점은 배움에 뛰어들고, 알아보고자 하는 의지다


예전에 들었던 세미나에서 기억나는 문장이다. 날밤을 새더라도, 몇날 며칠을 고민하더라도 해보라고. 설사 그 문제가 해결되지 않더라도, 그래서 결국 다른 사람에게 물어보게 되더라도 스스로 고민하고 해결하려 시도 했느냐 아니냐는 큰 차이가 난다고 한다. 문제에 대한 고민은, 그것을 시작한 순간부터, 인터넷을 뒤져가며 머리 아플 정도로 고민한 순간부터 달라지기 마련이라고.


그런 의미에서, 우테코 프리코스는, 나에게 주어진 정말 좋은 질문이었다.



서론이 조금 길었는데, 이번 1주차의 문제는 저번 기수들의 문제와 동일한 숫자 야구 게임이었다.

문제

GitHub - woowacourse/java-baseball-precourse: 숫자 야구게임 미션을 진행하는 저장소

숫자 야구게임 미션을 진행하는 저장소. Contribute to woowacourse/java-baseball-precourse development by creating an account on GitHub.

github.com

내 코드

GitHub - RunaNam/java-baseball-precourse: 숫자 야구게임 미션을 진행하는 저장소

숫자 야구게임 미션을 진행하는 저장소. Contribute to RunaNam/java-baseball-precourse development by creating an account on GitHub.

github.com


아무래도 첫주이다 보니, 다들 이것저것 준비하고 헤멜것을 예상하였는지 구현 자체는 그렇게 힘들지 않았다.
대체로 언어를 처음 배우면서 풀어보는 문제의 심화버전 같은 느낌이었다고 할까?
다만, 그것을 접근하는 방식, 그리고 문제를 마주하는 방식에 있어서 정말 큰 차이를 느꼈다.



나는... 이번 프리코스를 하며 몇가지 산을 넘어야만 했는데,

먼저, 코드 컨벤션에 관한 문제다.

이번 Gitppo 프로젝트를 진행하면서 코드 컨벤션에 대한 이야기를 나눈적이 있어서 google에서 제공하는 컨벤션을 세팅해놓은 상태였다. 다만, 이번 프리코스에서는 네이버 캠퍼스 핵데이 코딩컨벤션을 사용했기에 해당 내용으로 바꾸고... Checkstyle을 설정하고... 까지는 좋았다. 다만, 새줄문자 처리에 조금 난항을 겪었는데, 이는 OS의 차이에서 기인한다.

현재 나는 윈도우를 사용하고 있기 때문에, 기본적으로 CRLF가 새줄문자로 정해져있다. 다만, 이번 코드 컨벤션에 따르자면 이를 유닉스 형식의 LF로 수정해야 했다. 이를 위해서 처음 사용해보는 .gitattribute 라는 파일을 구성하고, 저장하면서 해당 문제를 해결할 수 있었다.

캠퍼스 핵데이 Java 코딩 컨벤션

중괄호({,}) 는 클래스, 메서드, 제어문의 블럭을 구분한다. 5.1. K&R 스타일로 중괄호 선언 클래스 선언, 메서드 선언, 조건/반복문 등의 코드 블럭을 감싸는 중괄호에 적용되는 규칙이다. 중괄호

naver.github.io


이를 제외하고도 indent(들여쓰기)의 depth(깊이)가 3이 넘지 않게 구성하며(while문 안에 if문이 있다면 이는 2 depth), 함수가 한가지 일만 하도록 만들어야 했다. 이러한 것들에 세세히 신경을 쓰며 코딩을 한것이 정말 처음이었는데, 이때 나는 개인적으로 '코딩의 무게'같은걸 알게 된 것 같다. 리펙토링이 용이하고, 이해하기 쉬운 코드. 그것을 위한 서로간의 규약이나 약속을 지키는 것이 얼마나 중요하고, 또 신경써야 하는 것인지 알게 되었다.

두번째로는, 함수나 class의 구성같은 문제다

부끄러운 말이지만, 개인적으로 이런식의 프로그래밍을 진지하게 해본적은 없는 것 같다. 웹 개발을 진행하더라도 항상 서로 '대충' '어느정도' 이해하고 넘어가는 것들이 많았고, 웹 프레임워크를 사용하며 프로그래밍 하였기에 그런 프레임워크의 규칙을 지키면서 진행한 경우가 많기 때문이다.

우테코에서는, 그리고 앞으로 개발자로서 마주할 수많은 문제들에서는 정답이란 없다. 그렇기에 향상심, 언제나 '더 나은' 코드를 짜고자 하는 마음을 가질 수 있는게 개발자의 장점이지 않을까.

아직은 서툰지라 코드를 짜놓고 선배에게 물어보기도 하였는데 (매번 여러모로 도와주시는 선배들이라, 항상 감사한 마음으로...), '클래스의 책임을 생각해라' 라는 조언을 들었다. 정확히는, '이 클래스가 정말 이 일을 하는게 적절한가?' 를 계속 고민하고, 고민해야 한다는 것이었다. 물론 정답이 없으니, 네가 생각하는 최선을 준비하라는 말과 함께.

그 조언을 듣고 나서, validator라는 클래스를 추가로 만들었다. 유저가 입력한 값을 검증하는 역할을 유저가 할 필요가 있을까? 라는 질문을 스스로에게 던진 답이었다.

'내 코드' 이지만, '내' 코드가 아닌 것 처럼 바라보고, 스스로에게 계속 질문을 던질것.
어제 내가 짠 코드를, 오늘의 나는 다르게 바라보고, 고민할 것.
아마 이것이, 지금 내가 가지고 있는 나름의 방향이 아닐까. 겨우 한주만에 많은 것이 바뀔수는 없다. 바뀌는 것은 내 마음가짐뿐이고, 그것에 수반되는 행동을 하여, 증명하기 위해 노력해야지.

세번째로는, 내가 자바에 서툴다는 점이다.

기존에는 C++로 알고리즘 문제를 풀었고, 자바는 spring 개발때에만 쓰곤 했다.
물론, 나도 spring 백엔드 개발자로서 자바의 중요성은 알고 있다. 다만... 바쁘다는 핑계로 미뤄두고 있었을 뿐. 미뤄둔 벌인지, 이번 개발을 하면서 c++과의 차이점 위주로 공부한 것을 또 복습하고, 더 나은 개발을 위한 좋은 코드들을 찾아보고, 공부하는데 시간이 정말 많이 들었다.

그런걸 제외하고도, 따로 constant를 파일로 관리한다던가, static이나 final이라던가... 자바 개발에 있어서 주의하며 코딩해야 될것들, 혹은 더 나은 방향을 찾아가고자 노력했다.

이 노력으로 다음번에는.... 조금 더 나은 코드를 짤 수 있지 않을까. 하는 작은 기대심을 가져본다.


뭐, 이외에도 부가적인걸 이야기하자면... 기말시험만 무려 5과목이다. 과제까지 포함하면 더 많을 것이고, 스터디에, 프로젝트까지. 이 모든게 우테코와 겹친다. 조금 과장을 덧붙이면 몸이 10개라도 모자를 지경이라고 생각할 정도로 바쁜 것 같다. 마음속의 우선순위에 우테코를 높이 올려두고, 다른것들을 처리하였기에 그나마 이정도를 해낸거같다.

그러다보니 사실 이번 프리코스 문제도 거의 새벽에 했다. (딱히 그러고 싶었던건 아니고... 시간이 그때밖에 없었다. 잠을 바쳤다. 그래서 회고도 새벽에 쓰는 중이다.) 그래도, 우테코에 임하며 생각하는 것은, 최소한 매일 4시간정도는 우테코에 투자하자는 것. 그것이 코드를 짜는 것이어도, 클린코드나 자바에 대한 고민이어도, 무엇이어도 좋으니 내가 '충분히 고민했다' 라고 느낄만큼 매일 투자해보려고 한다.

물론 합격을 목표로 달리고 있는 것은 사실이지만, (그래, 나도 합격하고싶다!) 이 여정의 첫 발자국을 내딛는 순간이 마냥 힘들다거나 어렵게만 느껴지지 않음에 감사하고, 또 기분좋게 끝낼 수 있기를 바란다.

시작한 첫주임에도 저번주와 달라졌다고 느끼는데, 마지막에는 얼마나 바뀌어있을까.
또 합격해서 우테코에 함께할 수 있다면 얼마나 성장할까.
이런것들을 헤아리며 이번주 회고를 마치려고 한다.