3주간의 회고

벌써 우아한테크코스도 3주차가 마무리되었다. 나머지 시간이 2주밖에 안 남았던 것이 아쉬울 뿐이다.
물론 합격하면 계속 성장할 수 있는 계기가 되겠지만 설령 불합격을 하더라도 많이 배웠기 때문에 앞으로 잘 나아갈 수 있을 거라고 믿어 의심치 않는다.

첫번째 프리코스 이메일


첫 메일을 보고 우아한테크코스 사진이 걸린 메일이 누추한 내 메일 보관함에 왔다는 거에 그저 설레었던 것 같다. 그래서 중요 보관함으로 얼른 옮겨놨었던 기억이 난다.

이후 우아한테크코스 1주 차 미션과 함께 다음 내용이 왔었다.

이 시간이 고통이 아니라 즐가운 시간이기를 기대해 봅니다.

처음 이 문장을 읽고 한 줄 사이 문장에서 학업을 병행하고 있는터라 살짝 두려움도 느꼈던 것 같다.
그래도 지금까지 힘들었지만 잘 해낸다는 믿음이 있었기 때문에 매일 밤을 새웠던 예비창업 활동과 같이 재미있을 거야!!라는 생각으로 일단 넘어갔다.

1주 차의 기억

1주 차가 나오는 날은 이제 슬슬 겨울인가?라고 생각이 드는 쌀쌀했던 날씨로 기억한다.
그날은 마지막 시험이 있는 날이라 시험이 망한 채로 집에 터덜터덜들어가서 자고 일어나서 유튜브 오리엔테이션부터 켰던 것 같다.
보고 나니 약간, 고등학교 때 수학여행 전 브리핑을 듣는 그런 느낌이라 설레었었던 기억이 난다.

이제 시험은 이미 끝난 일이기 때문에 바로 1주 차 미션을 보았는데 이름이 온보딩이었다.
말 그대로 배에 올라탄다는 의미 었다. 우아한테크코스 프리코스라는 배에 올라탔지만, 중간에 내려야 할 수도 있지만 폭풍우가 오던 열심히 하자라는 마음가짐으로 시작을 했었다.

1주 차 온보딩을 진행하면서 가장 기억에 남는 행동은 바로 기능 요구사항이라고 생각한다.

우리는 계속해서 명확한 답을 찾기 위한 과정에만 집중을 했었다.
과제도 그렇고, 수능도 그렇고 명확한 답이 정해져 있고 우리는 그대로 풀이를 했으면 되었던 것이다.
문제에서 잘못된 점이 있으면, 내가 잘못된 거겠지?라고 그냥 넘어가던 생활을 살아왔었다.

사실 제일 처음 들었던 생각들은 세부적인 사항이 아니라 너무 불친절해라는 생각이 컸다.
이러한 생각들은 1주 차 마무리 코수타를 듣고 많이 반성하게 되었다.

그뿐만이 아니라 슬랙이 활성화되면서 특히, 테스트 케이스 방이라는 곳에 들어가서 테스트 케이스도 올리면서 지식공유를 했었다.

지식공유를 좋아하던 입장으로는 테스트케이스 방은 맞춤 방이라고 할 수 있었다. 하지만, 이것 또한 코수타를 듣고 많이 반성하게 되었다.

1주 차의 마무리

1주 차가 마무리되고 1시 30분 ~ 4시 15분까지의 수업이 존재해서 수업이 끝나자마자 허겁지겁 코수타 재방송을 봤던 기억이 있다.

나름 지식공유, 문제 오류라고 생각했던 점들이 코수타들 듣고 부끄러워졌다고 생각이 들게 되었다.
이번 코수타를 통해서 고정관념이 깨지게 되었다.

테스트 코드를 올리고 보면서 다른 사람들뿐만이 아닌 나 또한, 문제에 대한 생각을 접어두게 하는 것을 보고 미안함을 느끼기도 하였고, 반성을 많이 했다.

그저 지식공유를 하면 편하지 않을까라고 생각했던 것은 지식공유가 아닌 생각하는 것을 방해하고 성장할 기회를 뻇어버렸다는 생각이 들었다.

또한, 세부적이지 않은 요구사항은 문제의 도메인에 대해서 좀 더 생각하게 되고 여러 생각을 할 수 있는 계기를 위해서 남겨둔 것이었지만, 그러한 것을 생각하지 못했었다.

이러한 것들이 모여서 나를 성장하게 만들어가는 것 같다.

2주 차의 기억

이전 1주 차에서의 실수를 반복하지 않기 위해서 결심을 하고 2주 차 미션에 대해서 집중하기로 했었다,

2주 차 미션 때부터 요구사항에 대한 파악과 함수의 분리, 함수 별로 테스트 작성이라고 밑줄을 그은 부분에 집중하기로 하였다.

2주 차는 그저 리팩토링이 너무 재미있었다. 사실 이전에는 함수에 모든 것을 때려박었었다.
하나의 함수에서는 값도 읽고, 출력도 하고, 검증도 하고, 반복문도 돌리고, 분기도 있고, 다른 함수를 호출하고... 이런 식의 행동이 반복이었다.

왜냐하면, 협업보다는 학교 과제 제출이 우선이었기 때문이다.
이번에 들어서는 계속해서 함수를 분리했다. 심지어는 그냥 출력하는 것까지 계속 분리하려고 시도를 했다.

사실 함수를 계속 분리하는 건 Depth를 줄이고 15줄을 넘지 않기 위함이라고 생각을 했었다.
하지만, 그런 것이 아니라 코드를 완성하고 나서는 왜 쓰는지 알게 되었다.

이 함수에서 모든 동작을 이게 뭐지 왜 동작하지라는 것을 한눈에 알 수 있었다. 기존 반복문과 조건문으로 범벅이 되었던 함수들은 왜 이 조건문을 수행하는지, 왜 이 반복문을 수행하는지의 의문투성이었다.

학교 과제를 제출하고 나서는 다시 코드를 봤을 때 알기 위해서는 디버깅을 하면서 차분히 알아가는 방법뿐이었다.
이러한 점들에 대해서 생각할 수 있게 했다는 점이 너무 좋았다.
내가 계속해서 성장하고 계속 봐도 깔끔해지는 코드를 본다는 것은 설레는 경험이었다.

그리고 테스트 코드도 잘 모르는 나는 AssertThat만 그저 기계처럼 이용하고 있었는데 Junit에 대한 문서도 보면서 다양한 테스트 방법이 있다는 사실에 대해서 알고 성장하고 있는 나를 볼 수 있었다.

특히, 테스트 코드에서는 private한 필드에 대해서 가져와 검증을 하고 싶었는데 private를 어떻게 검증하지 라는 생각이 컸다.

그냥 단위 테스트를 넘어가야 할까? 아니면, 테스트를 위해서 getter를 만들어야 할까?라는 많은 생각들이 들었다. 결국 검색을 통해서 Reflection을 통해서 private값을 가져와서 사용하는 방법을 채택하게 되었다.

3주 차의 시작

이제 겨울이 된 것 같다. 하나둘씩 사람들이 패딩을 꺼내기 시작했고 휴대폰을 하면서 집에 가던 나는 손이 꽁꽁 얼어붙는 느낌을 하나둘씩 느끼고 있다.

벌써 3주 차 미션이 왔다는 것이 실감이 안 났던 것 같다.

사실 계속해서 3주 차 때부터 과제가 밀리는 시점이라서 문제 풀이에 현타가 오게 되었다.
그런 와중에 우테코에 더 집중하는 계기가 된 슬랙이 있었다.

슬랙에서의 대화


나만 이런 고민을 하고 있는 줄 알았는데 많은 사람들도 고민을 하고 있었던 것을 알았다.
내 인생 모토가 후회해서는 늦었기 때문에 하나를 하더라도 최선을 다해서 하자라는 생각을 가지고 있었는데
학업과 우테코의 갈림길에서 많은 고민을 했었는데 성장을 위해서 이렇게나 우테코를 선택하는 사람이 많다는 것을 느끼고 나도 열심히 해야겠다라고 생각이 되었다.

그렇게 3주 차 미션을 시작하게 되었다.
점점 시간이 지날수록 우아한테크코스에 대한 애정이 섞이면서 문제에 대한 관심이 높아지고 있다.
코수타와 프리코스를 통해서 점차 성장을 해서인가? 요새는 붙어서 계속해서 공부하고 싶다는 생각밖에 없어졌다.

3주차 미션은 로또였다. 사실, 로또는 해본 적이 없다.
그저 친구들과 술 마시고 현금이 남아서 로또 사자!!! 하면서 사고 집에 들어가는 길에 하염없이 1등이 되면 뭐하지?라는 여러 가지 이야기를 하면서 들어가던 기억만 존재한다.

2주 차 미션 때는 매일 수업시간에 밥먹듯이 몰래하던 게 숫자야구여서 넘어갔지만 로또는 그냥 넘어가지 못했다.
계속해서 궁금했던 점들이 생겨났고 로또 홈페이지도 들어가고 친구한테 물어보기도 하고 실제로 로또를 사보기도 하였다.

로또 낙첨...


결과는 당연한 낙첨!!!이었다... 이러한 경험을 통해 도메인에 대한 이해로 이번 문제는 시작했던 것 같다.

사실 메일을 받자마자 가장 무서웠던 것은 Enum에 대한 사용이었다.
Enum을 사용해보려고 하지만 계속해서 모르는 점이 투성이었다. 2주 차에서도 썼지만 그저 상수를 담아두는 공간이라고 생각했기 때문에 이번 주차에는 많은 어려움이 존재했었다.

Enum을 몰랐던 이유는 사실 알고는 있지만 왜 쓰지? 귀찮아...라는 것 때문에 익숙하지 않았다고 생각을 한다.
그래서 익숙해지기 위해서 Java Enum 활용기를 보고 많은 공부를 하고 실제로 사용하게 되었다.

동일하게 가리키는 값에 대해서 다음과 같이 사용하면서 많은 정보들을 담을 수 있었다.

Enum Class


원래라면 각각 다른 값을 가져야 한다. 혹은 이럴지도 모른다.

public static final int FIRST_PLACE_COUNT = 6
public static final int FIRST_PLACE_MONEY = 2_000_000_000;
public static final int FIRST_PLACE_PRINT = "6개 일치 (2,000,000,000원)";

/* 생략 *

이러한 값을 가지는 것 보다 Enum을 쓰면 더 깔끔하게 느껴진다는 것을 알게 되었고
또한, 자동으로 Class와 같이 문법적인 체크도 해주면서 편하게 쓸 수 있었다.

평소였으면 평생 Enum에 대한 도입을 생각하지 않았겠지만, 이렇게 쓰게 해 줌으로써 다음부터는 Enum을 활용할 수 있다면 적극적으로 활용할 수 있다는 자신감을 가지게 되었다.

이런 성장이 너무 좋다고 생각한다. 프리 코스만 따라가도 배우는 것이 너무 많아서 좋다.

Enum에 대한 것이 아니라 이번에는 테스트 코드에 대한 것도 많은 고민을 하였다.
테스트 코드에 대한 것은 테스트 커버리지 100%를 보고 많은 생각을 하게 되었다. 누워서 그냥 뒹굴뒹굴하면서 보는데 테스트는 아는데 커버리지는 뭐지?라는 생각을 하게 되었다.

여기서 테스트 커버리지 100% 의 장점에 대해서 이야기하는데
노력해서 이번 주차 미션에서는 나도 테스트 커버리지를 높게 가져가게 짜 보자 라는 생각에 jacoco라는 것도 공부하게 되었다.

이러한 테스트 커버리지 100%에 대한 목표로 작성을 하다 보니까 테스트 코드를 왜 쓰는지 커버리지를 왜 높이려고 하는지에 대한 이해를 할 수 있게 되었다.

모든 기능을 작성하고 마구잡이로 나뉜 기능들을 하나로 모으기 위해서 엄청나게 큰 공사를 하게 되었다.

이전에는 Lotto, Money 등의 클래스에서 Print에 대한 기능도 하고 Validation이 각 함수에 존재하는데 같은 기능에 대한 Validation 기능이 너무 많았다.

이를 Validation이라는 클래스를 만들어서 클래스 메서드를 담기 위해서 분리하는 대공사를 거쳤는데 테스트에 대한 기반이 탄탄하기 때문에 마구잡이로 한 것 같았지만 문제가 별로 발생하지 않았다는 것이 큰 이점으로 다가왔다.

이번 문제에서 가장 고민을 많이 했던 것은 여러 가지가 있지만, 그중에서 일급 컬렉션에 대한 고민이 많았다.

일급 컬렉션은 분명한 Wrapper 클래스다. 멤버 변수로 가지고 있는 클래스는 물론, final로 선언이 되어있어서 함부로 수정이 불가능하게 캡슐화가 되어 있었다.

하지만 우리는 Lotto라는 일급 컬렉션에서 많은 동작들을 하게 했어야 했다.

  1. Lotto안에 있는 정보를 Print 한다.
  2. Lotto 끼리의 값을 비교해서 당첨인지 낙첨인지를 판단해야 한다,.
    등등

이러한 행동들은 분명하게 객체를 꺼내야 하는 방법밖에 기억이 나지 않았다.

그래서 getter를 만들어서 꺼냈지만, 멤버 변수로는 finalnumbers라는 컬랙션은 반환이 된다면 변경이 가능하다는 것을 테스트를 통해 알 수 있었다.

도대체 이러한 것을 어떻게 해결해야 할까?라는 고민을 하루 종일 하게 되었다.
그러기 위해서 여러 가지 가설을 생각해보았다.

  1. 컬렉션을 그냥 넘기면 참조 변수로써 값 변경이 가능하기 때문에 새로 Collection을 만들어서 반환을 한다
  2. 메서드를 만들어서 index를 인자로 받고 index에 해당하는 Integer 값을 반환하는 메서드를 사용한다.
  3. 무시하고 어차피 쓰지 set을 하는 행동이 있지 않을 거라고 생각하고 무시한다.

첫 번째 방법을 하자니 너무 불필요한 연산이 추가되기 때문에 찝찝하였고

두 번째 방법이 그나마 만만하다고 생각했던 방법이었다.

세 번째 방법은 내가 실수하여 값을 변경할 수도 있고, 혹은 내 가짠 프로그램이 다른 사람들과 같이 짜는 프로그램이었다면, 분명히 실수할 수 있었기 때문에 이 방법은 배제했다.

오랫동안 두 번째 방법 이상의 방법은 생각나지 않아서 검색을 통해 결국 가장 마음에 드는 방법을 찾게 되었다.
그것은 반환하는 값을 Immutable로 변경해주는 메서드를 사용하는 것이었다.
이렇게 반환된 값을 수정을 한다면, Exception이 발생되기 때문에 이를 쉽게 해결할 수 있게 되었다.

그래서 마무리?

계속 시간이 지날수록 성장해감을 느낀다. 학업을 조금 빼더라도 프리코스에 투자한 시간이 너무 아깝지가 않다.
더 배우고 싶다.

앞으로 배울 것도 많고 생각할 것도 많은데 이러한 고민들을 미리 해보면서 성장해나갈 수 있어서 요새 너무 행복하다.

모두가 같이 배울 수 있는 이러한 프리코스는 이제 1주밖에 남지 않았다. 마음 같아서는 10주 20주도 하면서 성장하고 싶지만 시간은 정해져 있고 배울 수 있는 사람은 한정되어있다.

온보딩을 타서 우아한테크코스를 통해서 열심히 항해하는 도중 내릴 수도 있지만 배에 올라탄 시점부터 많은 것을 배웠던 것 같다. 남은 2주 차도 열심히 노력해서 더 많은 것을 배워가고 싶다는 생각이 든다😀

+ Recent posts