이번주차는 정말 다양한 경험을 했고 많은것을 느낀 한주였던것 같다.
2주차 미션코드 깃허브
https://github.com/woowacourse-precourse/java-racingcar-6/pull/1784
[자동차 경주] 신권일 미션 제출합니다. by shin5774 · Pull Request #1784 · woowacourse-precourse/java-racingcar-6
github.com
이번에도 서로 코드리뷰 해봤으면 좋겠어요!! 댓글이든 디코든 이야기 해주시면 서로 리뷰해봐요!
주차 시작전 (0일차/코드리뷰)
솔직히 1주차를 마무리하고 내 코드를 봤을때 나는 이코드가 상당히 완성도 높은 코드라고 생각했다.
자신이 1주일간 몰입해서 만든코드가 얼마나 아름답고 완벽해보였겠는가..!
하지만 이는 코드리뷰를 시작하고나서 정확히 10분만에 무너져 내렸다.
다른 사람들의 코드를 보니 나와는 레벨이 다르다고 할정도로 대단하게 구현했다. 거기에 처음 들어보는 듯한 개념도 여러개 있었고..
다들 잘 못했다고 하길래 진짠줄 알고 믿었는데.. 다들 거짓말쟁들이었다.
그렇게 슬픈 마음으로 코드리뷰를하고 내 pr로 돌아오니 보이는것은 이제는 부끄러워진 내 코드를 향한 무수한 의견들로 축제가 열리고 있었다..
씁쓸한 마음을 한켠에 두고 다양한 사람들이 준 소중한 의견들을 하나씩 보면서 모르는 것은 메모해놓고 내 생각도 적으면서 1주차의 불타는 새벽이 마무리 되었다.
주차를 진행하면서
2주차 미션은 새로운 미션인 자동차 경주 미션이었다. 이는 작년 우테코 프리코스에서 나오지 않은 미션이었고 이번기회를 통해 지난 1주간 쌓아온 경험들을 녹여내볼수 있는 기회였다.
저번주차와 마찬가지로 이번주차에도 큰 목표를 하나 잡기로 했다.
이번주차는 '부족함을 채우고 새로운 경험을 해보자!' 라는 타이틀을 잡고 가기로 했다.
1주차의 코드리뷰를 통해 본인은 우물안 개구리도 아니고 우물안 지렁이정도 라는것을 깨닫게 되었고, 이에 코드리뷰를 기반으로해 부족한점을 채우기로 했다.
또한 저번주차의 반성점이었던 1. 기능목록의 활용 과 2.주말의 무기력함 을 여러 시도를 통해 해결해보기로 했다!
1. 코드리뷰를 기반으로한 부족한점 학습
1주차 코드리뷰에서 다양한사람들이 여러 의견들을 제시해 주었다.
대부분의 의견들은 이해도 되고 그렇게 생각한 근거도 이해가 되었다.
하지만.. 몇몇 의견들은 아예 처음 들어보는 개념이라서 무슨 말인지 부터 이해할수가 없었다.
레코드,Enum,의존성 주입, Pattern 객체의 cost?, 싱글톤 패턴?
대체 저건 무슨말을 하는거지..?
그래서 우선 해당 개념이 무엇인지부터 찾아보기로 했다.
레코드,Enum,의존성 주입은 간단한 개념이거나 학교 수업때 어렴풋이 들었던것이 떠올랐기에 비교적 수월하게 넘어갈수 있었다.
하지만 Pattern객체의 Cost나 싱글톤 패턴은 아예 처음들어본 용어였기에 이해하는데 애를 먹었다.
1-1. Pattern 객체의 cost는 갑자기 왜 나온걸까..?
이 의견이 나온 코드는 다음과 같았다.
처음에는 저게 무슨말인가 싶어서 저 의견을 그대로 구글에 검색해봤더니 다음과 같은 결과가 나왔다.
이 내용은 Effective Java라는 책(이게 여러곳에서 많이 보인다..)에 나온 개념이었다.
간단하게 말하자면 String.match() 메서드내부에서는Pattern 객체가 한번만 사용되고 버려지는데 이 Pattern 객체의 생성비용이 높다는 것이다.
match가 실행될때마다 이 비용높은짓을 계속해서 반복한다는 것이다.
그러니 이 내부에서 사용되는 Pattern객체를 미리 생성해서 사용하면 효율적이라는 것이 책에서 나온 해결방법이었다.
본인은 이 의견에 상당히 공감했고 혹시 이번 플젝에서 match가 사용될시 이를 적용해보기로 했다.
(귀신 같이 이번 미션에서도 검증로직에 match가 들어가야 했고 실제로 이 개념을 활용했다.)
1-2. 싱글톤 패턴..? 어디서 들어본거 같은데..
싱글톤 패턴에 대한 이야기는 본인의 코드리뷰가 아닌 다른 분의 코드리뷰중 어떤 분이 남긴 의견에서 출발한 것이었다.
당시 해당 코드는 싱글톤 패턴을 적용하고 있었는데 이는 여러모로 위험성이 배제되지 않은 기본적인 코드였기에 이에대해 언급하는 의견이었다.
이에 본인은 갑자기 궁금해졌다.. 저 싱글톤 패턴이라는게 뭘까? 궁금한데..?
분명 어디선가 들어본듯했는데 기억이 나질 않았다. (나중에 보니 학교 수업시간에 배웠더라는 주입식교육의 부작용이...)
이를 찾아보니 간단한 개념이었다. 클래스의 객체를 한개만 만들어서 이를 공용으로 사용하자는 것이었다.
개념은 간단한데 이 패턴에는 thread-safe하지 않다는 문제점이 있었다.
이에 대한 해결법이 종류가 다양했는데, 당시의 나는 아무 생각없이 다 알아보자는 생각을 하게된다...
거기에 더 나아가서 이를 정리해서 블로그에 올려보자! 라는 지금 생각하면 의식의 흐름 그 자체의 결심을 하게된다.
장장 5시간의 걸친 내용 조사와 본인의 이해, 그리고 이를 기반으로한 글 작성을 끝내고 이를 포스트했다.
https://skianything.tistory.com/24
싱글톤 패턴(Singleton Pattern) 처음부터 끝까지
오늘도 평화롭게 프리코스 주차 미션을 하고있던 와중.. 코드리뷰에서 다른 참가자가 작성한 코드리뷰가 떠올랐다. 이건 싱글톤 패턴을 사용하기 적합한 클래스네요! 싱글톤에 대해 아무것도
skianything.tistory.com
그리고 '헤헿 이거 열심히 올렸으니까 나도 디스코드 함께 나누기에 올려야징~' 이라는 생각을 가지고 이 정리를 채널에 올리게 된다...
이 글을 올린뒤 '아~ 오늘도 알찼다' 라면서 신나게 자러갔고 다음날 아침 운동까지 마무리하고 와서 디스코드를 키니 뭔가 새로운 댓글이 적혔다는 알림이 보였다.
내심 '한명정도 적어줬나보다' 라는 생각으로 확인을 했다.
그렇게 보이는건..
밤을 새면서 적은거라 부족함도 많은 설명이었는데 '잘 봤다'라는 댓글들이 많이 달렸다. 이때 뭔가 가슴이 간질간질 거렸다. 그리고 블로그에 들어가서 관리페이지에 가보니..
포스팅도 잘 안해서 한자리수도 안나오던 조회수가 갑자기 몇십명을 기록하기 시작했다.
이러다보니 아까 간질간질거린 감정이 무엇인지 알게되었다. 바로 기쁨이었다.
누군가에게 도움을 줬다는 기쁨. 밤새면서 만든 내 노력을 누군가 알아줬다는 기쁨, 이런 여러 기쁨들이 모인것이었다.
분명 블로그에 글을 작성할때 느꼈던 힘들었던 기억이 기쁨에 희석되는 느낌이 들었다.
그렇게 기쁨을 느끼던중 문득 저번주 OT에서 포비님이 지나가듯 말하신게 떠올랐다.
해보십쇼
너무 즐거울거에요.
'어? 내가 쓸모있는 사람이네?'
'지식을 공유했는데 많은 사람들이 고마워해!'
'어디가서 이런대접을 못받아봤는데(?)'
'내가 필요한 사람이구나!'
-포비님 (우테코 6기 프리코스 OT중)
저 말을 당시에는 이해못했는데 이러한 경험을 하고나니 현재 내 생각을 완벽하게 표현한 말들이었다.
이러한 경험들을 통해 무언가를 새로 배우고 정리하는것에 즐거움을 느끼고 이런 정보들을 공유하면서 서로 성장해 나가는 그리고 그 사람들이 다시 새로운걸 배워서 공유하는, 상호성장의 선순환이 만들어지게 되는것이다.
혹시 이 글을 읽고있고 이 경험에 대해 관심이 있다면 한번 해보는것도 좋을것이라 생각한다!
본인은 앞으로도 새로 알게된 정보를 작성할 것 같다.
2. 지금 무슨노래..? ???: 카페에서 모각코요.
저번주의 문제였던 주말의 게을러짐.. 본인에게 상당히 치명적으로 느껴졌고, 이를 고치고자 마음 먹었다.
마침 1-2에서의 정보공유로 자신감 만땅으로 채워진 상태였기에 바로 디스코드에 글을 작성했다.
생각보다 많은 분들이 주말 모각코에 관심을 가져주셨고, 이에 이분들을 모아 새로운 모각코그룹(?)을 운영하기로 했다.
쇳불도 단김에 빼랬다고 그주 토요일에 여의도에서 만나기로 했다.
(오랜만에 광합성이었다. 음~ 멜라토닌~ 비타민 D~)
본인은 극 I 성향이었기에 누군가를 만나는것을 그리 좋아하지 않는다. 하지만 '주말에 게을러 지지 않겠다!' 라는 의지 하나만을 가지고 모임에 나가게 되었다.
결과는..?
만족! 만족! 특대만족!
처음에는 서로 어색했지만, 모각코라는 목적상 각자 코딩을 시작하니 점차 편해지기 시작했다.
집에서 홀로 미션을 진행할때는 '나 혼자 이런걸 하고있다' 라는 공허함이 있었는데
다양한 사람들과 각자지만 코드를 보고있으니 뭔가 소속감? 연대감? 같이 고통받는다는 즐거움? 기쁨? 하여튼 집에서 코드를 볼때보다 오히려 더 집중이 잘되었다.
그러다보니 진도도 술술 나갔고 새로운 환경에서 공부를 하다보니 관점의 변화가 생겨서 코드도 더욱 다채롭게 수정할수 있었다.
물론 코드만 본건 아니다!
각자 저번주차 이야기도 하고, 한 의견에 대해 서로 이야기도 하고 (그때 나눴던 의견은 Validate 로직을 어디에 둘것인가 였다.) 신세 한탄도 하고, 잠도 자고싶다고 하고, 여러가지 이야기를 했다.
그리고 마지막에는 모두가 같은 말을 했다.
'이 과정 자체가 너무 재밌고 알차다'.
다들 나와 같이 하루종일 코드만 보고있으면서 코드의 개선점만 생각하고 그 과정 자체를 즐기고 있는
저번 주차에 언급한 '몰입' 을 모두가 하고있는 것이었다.
이에 나도 약간 뻠삥이라고 해야할까.. 의욕이 샘솟아서 이번 주차 미션을 더 열심히 진행할수 있었던것 같다.
혹시 모각코에 대해 안해본 사람은 한번은 해보는것을 추천한다. 혹시 모른다. 그 한번이 본인의 개발관점을 바꾸게 될 계기가 될지도 모를일이다.
3. 배우고 쌓고, 배우고 쌓고, 배우고 쌓고, 결과물을 보니? 누구세요..? feat.본질의 왜곡
이렇게 열심히 새로운 것들을 배워가면서 새로운 경험도 하고 이를 코드에 적용도 해보면서 나름 저번주보다 알차게 보내고 있었다고 생각했다.
그러던 어느때, 갑자기 기능을 분리할 일이 생겨서 여느때와 같이 메서드분리, 클래스 분리를 하던 와중 코드를 전체적으로 확인하게 되었다. 그리고 한가지 결론에 다다랐다.
내 코드가 이해가 안돼.. 엉?
분명 본인이 짠 코드고 본인이 짠 로직이다. 다른 사람보다 본인이 가장 잘 이해해야 하는데 정작 자신이 코드의 흐름을 따라가지 못하고 있었다.
어째서일까? 싶어서 본인이 메모하는 노션을 보고 생각의 흐름을 따라가 보기로했다.
그 노션을 보니 많이 보이는 생각의 흐름이 있었다.
'이건 이 패턴에 의해서 적용하면 안돼.'
'이 패턴에서는 이걸 사용해야만 해'
'이 양식(형태)를 지켜야해'
디자인 패턴이나 DTO/VO,MVC,싱글톤 패턴, 이러한것들은 전부 현재의 코드를 개선하기 위한 한가지 수단이다. 즉 때와 상황에 맞게 이를 적용하는것이 옳은 사용법이다.
하지만 나는 이러한것들에 너무 매몰되어서 내 코드 자체를 이 수단들에 맞추려고 하고있었다. 사용방법에 맞지 않게 무작정 적용만 하려고 하니 코드는 오히려 복잡해지고 이해하기 어렵게 되어버렸다.
이는 분명 1주차에서 내가 주의했던 문제점중 하나였다. '너무 지식에 몰두하지 말자.' '무작정 따라가면 남는게 없다.'
1주차에서는 잘 넘긴 이 문제점이 2주차가 되니 아는 지식이 많아지고 이걸 다 적용하려고 하니까 다시 발생한것이다.
이에 한가지 결정을 내렸다.
패턴,구조,방법 이런거 다 무시하고
기초부터!
기능 쪼개기부터 다시 집중해보자!
다시 초심으로 돌아가 현재 코드에서 기능부터 쪼개기 시작했다. 메서드 분리부터 차근차근.. 메서드 분리 다음에는 클래스분리를 하는식으로 진행했다. 기존 코드가 보기 어렵다면 다 지워버리고 처음부터 쌓아 올리기로 했다.
그렇게 메서드를 쪼개고 클래스를 쪼개는 과정에서 항상 생각한것은 '나는 왜 이걸 쪼개려고 하는거지?' 라는거였다.
항상 내 행동의 의문을 가지고 그 이유에 대해 생각을 했다.
행동의 이유를 생각하고 그 이유의 사고과정에 대해 다시 질문을 던지는 것을 반복하는 과정에서 여태까지 매몰되어 왔던 개념들을 사용하는것으로 그 질문들에 대한 답을 했고 그러다보니 자연스럽게 분리에 대한 확신이 들었다.
점차 머리속에 뭉게뭉게 거리던 코드들의 구조가 조금씩 선명해지기 시작했고 결국 마지막에는 전보다 깔끔한 구조를 이루었다. 기존의 개념까지 적용해서 말이다.
이번 경험으로 느낀게 있다.
배보다 배꼽이 크다는 말은 실존했다!!
구조,방법론에 목매여서 결국 중요한 것인 기능 분리를 잊어버린거다!
항상 기초를 중심으로 시작하자!
추가적으로 클래스를 분리하는 과정에서 유튜브에서 본 한 개발자의 말이 인상깊어서 여기 남긴다.
기능을 가져서 사용한다는 생각보다는
기능을 떠넘긴다는 생각을 해보자
주차 반성점 및 개선사항
반성점을 토대로 수정및 새로운 시도를 많이 해봤고 그 과정에서 다양한 문제점이 나오게 되었다.
1. 기능목록의 과도한 작성
앞쪽에 대표해서 적기는 너무 적은 내용이라 반성점에 적는다.
이전주차의 문제점을 개선하기위해 기능목록을 활용하여 각 기능별로 체크리스트를 만들었는데... 이러다보니 커밋양도 평소의 2배 넘게 나오게되고 점점 기능목록이 본인도 이해하기 힘들정도로 수정되는것이 보였다.
이에 너무 과하게 적는것 또한 문제가 있다고 생각했고, 구현기능들에 대해 상세하게만 적고 체크리스트는 안하는 방식으로 다음주차에는 진행해보기로 했다.
2. 기초부터 차근차근
항상 기초부터,메서드 쪼개기부터, 기능구현부터 차근 차근해보자
어차피 시간은 1주일이다. 즉 무언가를 시도해볼 시간을 많다는것이고 한번 망하더라도 다시 할시간이 충분하다는거다.
다음주차부터는 기초부터 해보는거다.
3. 익숙함에 짓눌려.. 소중함을 잊어버림
본인이 확실하게 느낀다.
저번주차보다 열정적으로 몰입하지 못했다는것을..
포스트도 하고, 모각코도 하는걸 보고 내가 열심히 했다고 생각하는 사람들이 있을것이라고 생각한다.
하지만 나는 열기가 줄어든게 느껴진다.
아마 이 과정이 익숙해진거겠지.. 매일 코드를 보고 수정하고 이 과정자체가 너무 평범해져서 게을러진것이다.
이러한 경험은 앞으로 2주밖에 남지 않았다.
물론 우테코에 붙으면 더 이어갈수 있으니 좋겠지만, 사람일은 어떻게 될지 모르기에 매 순간 최선을 다해야 한다.
주차를 마무리하면서
이번주차의 진행과정은 본인의 인생에서 한번도 겪어보지 못한 경험이라고 생각한다.
본인이 적극적으로 무언가를 주최하고, 적극적으로 무언가를 시도하고 이를 공유하고, 매순간 매순간이 도전이고 새로움의 연속이다.
벌써 2주차가 끝났다. 즉 절반이 지나갔다는것이다.
이 생활을 2주나 했다는 인정보다는 이런 경험을 할 기회가 앞으로 2주밖에 없다는 생각이 더 크다는것을 느낀다.
아마 힘들긴해도 이런 생활자체가 즐거움이 있다는것이라는 반증일것이다.
소중한 후반부의 시작이다.
후회가 남지않도록 최선을 다하자!
주차에 포스트한 우테코 관련 정보
1. https://skianything.tistory.com/24 (싱글톤 패턴에 관하여).
싱글톤 패턴(Singleton Pattern) 처음부터 끝까지
오늘도 평화롭게 프리코스 주차 미션을 하고있던 와중.. 코드리뷰에서 다른 참가자가 작성한 코드리뷰가 떠올랐다. 이건 싱글톤 패턴을 사용하기 적합한 클래스네요! 싱글톤에 대해 아무것도
skianything.tistory.com
기타 잡담
1. 잠은 줄이면 줄여진다.
-놀랍게도 평일 8시간 주말 10시간 자던 나도 2주동안 평일 4시간 주말 6시간 정도로 줄여도 평범하게 생활이 가능하다. 하지만 옆에 카페인이 있어야한다.! 없으면 책상에서 기절할지도..
2. 현재 관심사: - 클린코딩(책 빌려볼 예정,스터디 있으면 좋을듯),
- 블로그 포스팅(정보! 새 정보를 찾자!)
- 이펙티브 자바(아니 너무 눈에 띈다. 다들 이것만 읽고있는건가..?)
3. 현재 궁금증: 인텔리제이 단축키 빨리 외우는법(슬슬 마우스가 불편해진다.)
'우아한테크코스 6기' 카테고리의 다른 글
4주차 미션 [크리스마스 프로모션] 회고록 (0) | 2023.11.15 |
---|---|
3주차 미션 [로또] 회고록 (0) | 2023.11.08 |
싱글톤 패턴(Singleton Pattern) 처음부터 끝까지 (0) | 2023.10.27 |
1주차 미션 [숫자 야구 게임] 회고록 (0) | 2023.10.25 |
DTO와 VO에 관하여 (0) | 2023.10.25 |