사실 코딩테스트를 본지는 많이 지났다. 떨리는 마음이 진정이 안된다. 그때의 기억과 나를 돌이켜보기 위해서 쓰려고한다.

결전의 날

12월 17일은 유난히 긴장되는 날이었다. 시험이 끝난지는 3일이나 되었지만, 계속해서 긴장이되었다.

우선 일찍일어나야지 라는 생각에 알람도 5분간격으로 계속 맞췄던것 같다.
추울 수 있으니까 따뜻하게 입고 선릉으로 출발했다. 선릉에서 내리자마자 슬랙메세지에서 스타벅스에서 IDE가 많이보이네요 ㅎㅎ라는 이야기가 들려왔다.

나는 먼저와서 계속해서 미리 노션에서 실수할거리나 정리해놓은것을 보면서 컴포즈에서 커피를 하나먹으면서 다리를 동동구르며 대기를 했었다. 그리고 옆사람이랑 긴장도 풀기위해서 이클립스도 하나사서 빌딩에 들어가게 되었다.

들어가자마자 우아한테크코스 표지판이 보였었다. 신분확인때문에 줄을 길게서있어서 사진을 찍고싶었는데... 눈치가 보여서 찍지못했었다.

시험을 보기전에 아키텍쳐설계를 해야하기 때문에 펜이랑 공책을 가져왔어야하는데 놓고왔었는데 감사하게도 우아한테크코스 측에서 기념품으로 공책이랑 펜을 챙겨주셨었다.

펜이랑 공책

펜을 보고 한참 웃었던것 같았다. 꽤나 긴장이 풀렸었다. 우아한테크코스에서 주던 간식거리랑 함께 노션을 보면서 계속해서 지금까지 공부했던것을 되세김질 했었다. (귤이 좀 맛있었던것 같다... )
그렇게 기다리다 보니까 메일한통이 왔었다 보자마자 이제 시작이구나라는게 실감이 들어 심장이 터질 뻔했었다.

펜이에요 드립이 나한테 적중했다

시험시작

메일을 보면서 생각했던것은 안 돌아가는 프로그램보다 돌아가는 쓰레기를 만들자였다.
돌아가는 쓰래기를 만드는것은 일가견이 있기 때문에 피식 웃기도했고 이 사진이 떠올라서 그래 일단 돌아가게 만들자!!! 라는 생각이었다.

내가 완성한 코드인가...


이게 돌아가는 쓰레기의 코드일까? 라는 생각도 하면서 시험이 시작이 되었다.

열심히 노력하였지만 요구사항을 꼼꼼히 읽지 않아서 1시간 가량을 디버깅에만 허비하게 되었다.

명시된 조건과 다르게 임의로 생각을 하고 코드를 짠것이 문제였다. 그래서 많은 후회가 남게 되었다. 좀 더 빨리 알았다면 리팩토링과 테스트코드를 할 시간이 충분했을 건데 라는 생각에 많이 우울했었다.

지금 돌아가보면 꽤나 좌절했지만, 지금 생각해보면, 이것도 교육의 연장선이 아닐까 생각한다.

지금 까지는 편하게 코드를 짰지만, 분명히 시간제한이 있을수도 있다고 생각한다
그리고 큰 실수를 하였기 때문에 요구 사항을 꼼꼼히 읽고 분석하자 라는 것이 마음속에 새겨졌던것 같다.

회사에서 큰 프로젝트에서 실수를 한것이 아니라 지금 실수를 한것에 대해서 감사하다고도 느낀다.

마치며

시작할때는 눈도 안내리고 가디건을 입던 날씨였지만, 벌써 패딩을 입고있다.
이제 우아한테크코스의 최종 코딩테스트까지 끝마쳤고 2일후면 결과가 발표가 난다.

사실 결과도 크게 중요하겠지만 지금까지 얻어간게 너무 많아서 행복했던 기억만 남아있다.

또한, 성공보다 실패에서 배우는 경험이 크다는것을 알고 있기 때문에 최종코딩테스트에서 많이 아쉬웠지만 이 또한 성장할 수 있는 밑거름이었다.

아마 탈락할 수도 있지만 (사실 가능성이 크지만 ㅎ...) 지금까지 배웠던거를 친구들이랑 나눠서 같이 성장하고 싶은 마음에 내가 만든 학술소모임에서 이번에 우아한테크코스 문제도 풀어보자라고 이야기를 꺼내고 지식공유를 해보려고한다.

오늘도 남은 하루 프리코스를 진행했을때 처럼 그 때 그 열정 잃지 않고 성장해나가려한다.

마지막으로 공부를 할 수 있게 해서, 방법을 알려줘서, 성장할 수 있게 해줘서 감사했습니다.
또한, 같이 공부하고 지식공유를 서슴치 않게 행동했던 모든분 프리코스 분들께도 감사합니다!!!

마지막을 기념하며

우아한테크코스도 벌써 마무리가 되어간다.
가장 크게 느낀점으로는 식상하지만 성장했다라고 할 수 있다.
지금까지는 코드를 적을 때 별생각들이 없었다. 문제나 다른 프로그램을 만들때도 그냥 기능이 성공적으로 동작하는지에만 집중했었다.

하지만, 이제 기능을 구현할 때, 어떤 경우가 있을까? 이렇게 넣으면 괜찮을까? 라고 계속 생각하게 되는 개발자, 아니 무언가를 만들어 내고 제공하는 입장으로서의 성장이 가장 큰 성장이라고 할 수 있다.

개발자로서의 성장도 물론 4주동안 많이 성장했다고 생각을 한다.
기존에는 클래스라는 개념을 배웠을 때 Capsulation에 대해서 getter, setter만 알았다.
캡슐화를 하기 위해서는 단지, 맴버변수만 private하게 선언을 하고, getter, setter를 기계적으로 넣을 뿐, 왜 그렇게 사용하지? 라는 생각이 부족했다.

일급 컬렉션 등을 알게 되면서 지금까지 작성했던 내 코드는 말도 안되는 것이라는 것을 알게 되었다.
final을 통해서 불변하게 하고, getter를 쓸때도 불변이라는 것을 지켜서 원하는 그냥 값 자체만 넘겨주고 하는것들을 통해서 이것이 제대로된 캡슐화구나 라는 것을 알게 되었다.

이뿐 만이 아니다. TDD를 지켜야한다, Refactoring을 읽어야한다., 등등의 말들이 나에게는 "그래 그냥 좋은거지, 나중에 회사가서 그 때부터 지키면 되는거지"등의 안좋은 생각만 가지고 있었다.

많이 말해서 알겠는데 왜 좋은 건지에 대해서는 이번 프리코스에서 많이 느꼈던 것 같다.
테스트 코드를 작성하고 나니 리팩토링과 내 코드에 대한 자신감이 많이 생겨나게 되었다.
그리고 Refactoring을 하고 나서 코드를 읽는게 쉬워지게 되었다.

코딩을 해봤으면 사실 누구나 느꼈을 것이다. 내가 짠코드를 사실 하루만 되도 이해하기 어렵다는 사실을
이런 점들이 해소가 되었다. 코드를 좀 더 잘보이도록 수정할 수 있게 하면서 작성하니까 코드에 대한 이해가 늘어서 금방금방 적응할 수 있었다.

마지막으로 Enum을 왜 이제 알았지? 라는 생각이 들었다.
Enum만큼 좋은 것이 없다고 느낄때가 많아졌다.

매일 매일 내 코드는 하드 코딩이었다. 그러다보니 값을 동시에 바꿀때도 힘들었고 이런일도 있었다.

매도/매수를 각 0, 1의 값에 매핑을 해서 저장을 하였는데, 코드를 볼때마다. 매도가 0이었나? 매수가 0이었나...
하면서, 항상 IA를 뒤져보곤했다.

불편함을 느끼면서도 방법을 몰랐었다. 상수라는 개념을 쓰고나니 되게 편해졌고, 이런 상수를 Enum에서는 상태까지 관리할 수 있다는것이 말도안되게 편하다는 것이 눈앞에 다가왔었다.

이번 프리코스는 사실, 학기중이라는 부담감과 여러가지 할일들에 의해서 바쁜 와중이었다.
하지만, 프리코스를 할 때는 그것들을 잊고 코딩에 몰입할 수 있어서 너무 행복했다.
하루종일 해도 지치지 않고 시간가는줄 모르고 했던적이 한두번이 아니며, 코드작성의 묘미를 느낄 수 있었다.

이런 프리코스를 공짜로 경험한다는것이 행복했었다. 하지만, 이제 프리코스도 마무리할 시간이 다가왔다.
많이 배웠으니까 어느정도 어떤식으로 공부를 해야하는지 감도 잡은것 같다. 더 하고 싶지만, 어떻게 될지는 잘 모르겠다.

4차 다리 건너기 게임

이번 다리 건너기 게임에서는 클래스 분리에 대해서 많은 노력을 무엇보다 들였었다.
사실 좌충우돌 여러가지 사건들이 있었다. 하나하나 적으면서 생각해보려한다.

기능 요구사항은 항상 꼼꼼히

첫 번째는 '기능 요구 사항을 꼼꼼히 읽자'다 이번에 기능 요구사항 중에서 이런 항목이 존재했다.

기능 요구 사항


사실 이번에는 실수 하지 않도록 하기 위해서 CheckList를 다음과 같이 작성을 하였지만 이 부분을 주의깊게 보지 않았다.

Check-List


그래서 인지... BridgeGame을 Controller로 생각하고 기능을 짜기 시작했다.
이후 제출 전날에 알아서 급하게 부랴부랴 리팩토링을 했던 기억이 있다.

하지만, 코수타에서도 말했듯이 미리 테스트 코드를 단단하게 짜놨기 때문에 이 부분에 대해서 그래도 편하게 리팩토링을 하는 경험을 했던 것 같다.

이전 3차에서도 이런 경험을 하였는데, 계속 경험할 수록 테스트 코드는 그저 신이야... 라고 생각을 하게되었다.

MVC 패턴

이번에는 특히나 클래스의 분리에 대해서 많이 생각했던 주차였던 것 같다.
그러면 도대체 어떤식으로 클래스를 분리하면 좋을까? 라는 생각이 들어서 찾아보게 되었다.
항상 이런 생각은 나 뿐만이 하는것이 아니라 대가 들이 이미 정리해둔 개념들이 있기 때문에 쉽게 찾을 수 있었다.

그 중 선택했던 것은 MVC 패턴이다. Spring을 배웠다면, 누구나 익숙한 패턴으로 볼 수 있다.
각각 Model, View, Controller로 나눠서 각각의 의존도를 낮추고 객체지향의 사실과 오해에서 말했던 메세지를 통해서 어떤한 결과를 받을 수 있는 좋은 패턴이라고 볼 수 있다.

그렇기 때문에 적용하려고했는데 사실 막막했었다. 그리고 공부를 하면서 많이 반성을 했던것 같다.
기존 MVC 모델을 너무 대충 아뭐... 클라이언트 요청이 들어오면 대충 Controller에서 처리하고... Model에서 그냥 서비스로직 다 떄려박고... 이러한 생각으로 그냥 기계처럼 짜왔던것 같다.

근데 이제 클라이언트에 응답을 받는것을 내가 어떻게 할지 정했어야했고 대충 MVC에 대해서 이해하고 기계적으로 코드를 짜왔기 때문에 작성하는데 많이 어려움을 느꼈었던것 같다.

Model에 이 기능을 넣어야하나? Controller에 이러한 메서드가 들어가는게 맞나? 라는 고민들이 코드를 짤때마다 많았던것 같다. 그렇기 때문에 좀더 깊숙히 공부할 수 있었고
클래스 분리에 따라서 많은 필요없는 코드들이 각각 정리 될 수 있었다.

Enum

저번 Enum도입때 Enum이 너무 좋았기 때문에 이번에도 Enum을 가차없이 도입하기로 하였다.
총 3개를 넣을 수 있었는데 BridgeCommand, BridgeState, GameState 총 3개로 나눠서 관리를 했는데 상태와 여러가지 변수를 한번에 넣을 수 있다는 장점으로 여러코드에서 많이 사용할 수 있었던 것같다.

이중에서 뭔가 겹치는거는 합치거나 굳이 Enum을 써야 했을까...? 라는것도 있었지만 내 주관에는 필요하다고 해서 막무가내로 생성하고 밀어붙였던 것같다.
그래서 리팩토링에 대해서 Enum은 특히 생각을 많이 했지만 더 좋은 방법이 생각나지 않은 점이 아쉬웠다.

이제 진짜 끝

계속 느끼는 것이 아쉽다... 프리코스가 1년짜리였으면 좋겠다... 라는 생각을 많이한다.

하지만, 생각하는 방법도 알고 공부를 어떻게 해나가야하는지 감을 잡았던것같다.
그리고 더욱 성장하는 개발자가 될 수 있도록 불씨를 집어넣어준것 같았다.

이 불씨가 꺼지지 않도록 계속해서 노력해서 좋은 개발자가 되도록 노력하려고 한다.
이런 성장할 수 있는 기회를 준 코치님들께 감사의 인사를 전하려고 한다.
그리고 같이 성장하고 지식공유를 지속적으로 해준 프리코스를 함께했던 분들께도 감사의 인사를 남기려고한다.

감사합니다😀

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주 차도 열심히 노력해서 더 많은 것을 배워가고 싶다는 생각이 든다😀

원래는 잡담 자체를 안썼는데 이번에 우아한테크코스를 도전하면서 목표가 있으면 좋을것 같아서 시작해봅니다 :)

사실 12월 17일에 다른 학교 시험이 두개나 예정이라 무조건 합격보다는 성장을 우선으로 도전해보려고 해요

사실은 그것도 김치국인게 12월 14일에 우선 프리코스에 대한 1차합격을 통과부터 하고 고민을 하는게 맞으니까 하나씩 해보려고 합니다.

클린코드와 객체지향에는 계속 관심이 많았지만, 사실 써볼 기회도 많이 없었고 계속해서 써보려고해요

내일 프리코스에 관한 오리엔테이션을 진행한다고 하는데 하필이면 시험인지라 아쉽지만, 녹화방송으로보고 내일부터 열심히 써보려고합니다.

계속해서 프리코스에 관한 1일 1블로그로 내가 코드를 짤때 생각 했던것을 올리려고 하는것 만해도 그 당시에 어떤 생각을 가졌는지를 알 수 있기 때문에 노력해보려고 합니다.

이번 프리코스에는 이전 기수와 다르게 코딩테스트가 없어서 많은 사람들이 신청하는데 다같이 성장할 수 있는 기회가 되었으면 좋겠습니다 😀

라고 할뻔했습니다... 안타깝게도 바로바로 블로그 포스팅은 주차가 끝난 뒤에 하면 좋겠다고 우아한테크코스 프리코스 OT에서 언급을 했기 때문에 목표를 새로 정하려고 합니다!!

기능 별로 커밋을 하기 때문에 1일 1커밋을 목표로 달리고, 1주차가 끝나고 그 동안 모았던 블로그글을 Notion으로 정리해놓고 한번에 올릴겁니다!!!

이번 기회로 많은 배움을 얻었으면 좋겠습니다 !! 합격보단 성장을 목표로 달리겠습니다!!

+ Recent posts