내가 얼마나 부족한 지 알 수 있었다..
신경썼던 영역별로 느낀 점 !
사실 처음부터 끝까지 클린코드를 지향하며 코딩을 한 것은 처음인 것 같다. 시간복잡도, 공간복잡도 정도만 생각해도 머리가 깨질 것 같다는 핑계로 코드 리팩토링은 항상 내가 알아볼 정도로만 했었다..
그렇게 하니 당장 내가 짠 코드를 3일만 있다가 봐도 무슨 코드인지 이해하는지 엄청 오래 걸렸었다.
하지만 이번 프리코스는 이 부분에 대해 시작부터 엄~청 강조하고 있기 때문에 나도 한 번 클린코드를 짜보자 하는 마음으로 열심히 리팩토링 했다.
코드 컨벤션은
https://myeonguni.tistory.com/1596
를 참고해서 지키려고 노력했다. 클래스 이름, 메소드 이름 규칙부터 세로 공백, 가로 공백같은 작은 부분도 나름 철저하게 지켜가며 코딩했다.
나중에 알게 된 건데 intelliJ에는 xml형태로 코드 스타일을 import하여 사용할 수 있는 기능이 있다..!! preference -> Editor -> Code Style -> Scheme 옆 톱니바퀴 -> import scheme 로 사용 가능하다.
기능적인 면에서는 하나의 메소드는 하나의 기능만 가져야한다
는 규칙을 제일 신경 썼던 것 같다. 그러다보니 코드의 depth 자체가 자연스레 작아지게 되었다.
사실 그 외에 객체지향적인 원칙들(SOLID 같은)은 잘 모르기도 해서 내가 잘 지켰는지, 아닌지에 대한 판단조차 잘 서지 않는다.. 조만간 다시 한 번 깔끔하게 정리해서 올려야겠다.
기본적으로 1주차 미션은 쉬운 코딩테스트 문제 형식이어서 그런지, 성능에 대한 부분에 제일 먼저 눈이 가긴 했다.
문자열의 변환이 많이 일어나면 String 대신 StringBuilder를 사용한다던지, 데이터에 대한 전처리로 긴 배열에 대한 탐색횟수를 줄인다던지 하는 방법으로 성능을 개선했다.
사실 이번 미션은 입력 크기 자체가 크지 않아 성능적인 부분은 크게 신경쓰지 않아도 됐을지도 모른다.
몇 번이나 강조했던 유지보수하기 좋은 코드, 클린코드에 대한 부분에 더 신경 쓸 수 있게 배려해 준 것이 아닌가 싶다.
이번 미션은 깃 허브 PR을 통해 과제를 제출하는 형식이기 때문에 커밋 로그가 그대로 남게된다.
또한 요구사항에 기능 단위로 커밋해달라는 말이 있어 기능을 잘 나누는 것도 중요했다. 어찌보면 클린코드와 연관되는 부분이 많다.
기능을 잘게 쪼게 작은 기능별로 테스트, 커밋을 반복하니 그렇게 하지 않은 경우보다 재활용, 수정하기 간편해지는 것을 느꼈다.
커밋 메시지도 github commit convention 을 지키려고 노력했다.
링크 :
https://gist.github.com/stephenparish/9941e89d80e2bc58a153
1주차가 종료되고 참가자들끼리 서로 의견을 교환할 수 있는 커뮤니티가 github discussion으로 오픈됐다. 여기서 다른 분들의 코드를 조금 봤는데 정말 충격이었다.
어떻게보면 정말 간단한 문제풀이 미션이었는데 이런 것들에서조차 이 정도 차이가 날 줄은 몰랐다. 프로그램의 성능적인 면은 물론이고, 클래스/기능 분리, 커밋 메시지 작성 등 모든 부분에서 내 부족함을 느낄 수 있었다.
이런 실력으로 다른 분의 코드 리뷰를 하는 것 자체가 실례인 것 같다는 생각이 들 정도였다. 그래서 조용히 구경만 했다ㅠ
정말 갈 길이 멀다...
이렇게 써놓고 보니 그냥 나에 대한 실망만 한 것 같지만, 사실 그 만큼 의미있는 한 주 였다고 생각한다. 혼자 성장하는데에는 확실히 한계가 있다고 최근 느끼고 있는 만큼 이런 기회를 최대한 활용하고 싶다.
남은 3주도 의미있는 시간을 보낼 수 있도록 열심히 해봐야겠다.
잘보고갑니다!