본문 바로가기

회고

[우아한 테크코스 프리코스] 2주차 회고 - 자동차 경주

2주차는 시험도 끝나서 1주차때보다 널널하게 과제를 수행할 수 있었다. 그래서 지난주에 시간을 많이 못들여 아쉬웠던 부분을 최대한 개선하려고 노력했다.

배우거나 노력한 점

  •  1주차 공통피드백을 보고 eslint 와 prettier 를 설치해서 개발해봤다.
    그동안 귀찮아서 안했었는데 설치해보니 세상 편하다. 들여쓰기 간격 등을 저장할때마다 자동으로 조정해주니까 가독성도 좋고 내가 미처 놓친 띄어쓰기 등도 조정이 되어서 정말정말 편하다. 근데 이걸 소감문에 안썼네.. 다음부터는 소감에 내가 노력한 모든 부분을 담을 수 있도록 노력해야겠다.

 

  • 숫자야구 풀이 강의를 보면서 기능 목록을 어떻게 작성하는지, 클래스와 메소드는 어떤 단위로 나누는지 학습하고 적용했다.
    코치님이 구현 전에 고민하는 시간이 7할이라고 말씀하셨기 때문에 나도 이번에는 더 많은 시간을 들여서 기능 목록을 먼저 작성해봤다. 또한 2주차 목표가 함수를 분리하고, 각 함수별로 테스트를 작성하는 것이었기 때문에 기능별로 함수를 분리하는 것이 핵심이다! 라는 생각으로 어떻게 분리할지 많이 생각했다. 해설강의에서는 반복되는 작업에 대한 함수를 만들고 전반적인 흐름은 메인함수에서 작성하셨기 때문에 나도 그렇게 바꿔보려고 계획했다. 근데 막상 구현을 시작하니까 메인함수에 로직을 수행하는 코드가 있는게 지저분해보여서 전부 메소드로 만드는게 낫지 않나? 라는 생각을 했다. 고민이 되어서 챗 gpt한테 물어봤는데 메인함수에는 코드를 줄이는게 나은 방향이라고 하더라.
    그래서 구현하면서 클래스와 메소드가 조금씩 추가되었고 결과적으로는 메인함수에는 메소드를 호출하는 코드만 남았다.
    어쨌든 기능 목록을 미리 만드는 건 효율이 훨씬 좋았다. 1주차보다 구현시간이 훨씬 짧았고 기능별로 나눠서 작업하고 커밋하니 로직이 헷갈리는 일도 줄었다.

 

  • 기능별로 커밋하는 일도 원래 플젝할때 당연히 했던 건데 1주차때 멋모르고 그렇게 안한게 아쉽다. 이번에는 기능별로 열심히 커밋했다 히히.
  •  네이밍에 더욱 신경썼다.
    클래스 단위로 구현하다보니 메인함수에는 클래스명, 메소드명으로 간결하게 작성되었고, 그렇기에 메인함수를 보고 코드의 전체적인 흐름을 파악할 수 있도록 하려면 네이밍에 기능을 명확하게 나타내주어야 했다. 그래서 더욱 가독성 있고 기능을 파악하기 쉬운 이름으로 고민하고, 구글링도 해봤다. 근데 다른 사람에게 코드리뷰 받은 부분에서 내 메소드 이름에 대해서 조언이 있었다.(printOneRoundResult 라는 메소드명은 printTotalRoundsResults 라는 메소드가 있으니 One을 빼도 될 것 같다는 조언) 더욱 가독성 있게 만들고자 했던 것인데 다른 사람 눈에는 불필요해 보일수도 있는 것 같다. 솔직히 누가 맞다고 볼수는 없겠지만 앞으로는 좀더 생각해서 베스트인 이름을 짓도록 해보자.

  •  요구사항대로 잘 지킨 점
    지난주 회고를 쓰길 정말 잘한 것 같다. 구현하는 한주동안 회고에서 쓴 개선점을 읽고 떠올리면서 개선하려고 했던 점을 놓치지 않을 수 있었고 요구사항도 더욱 꼼꼼히 챙겼다.
    1주차 공통 피드백 + 기능 요구사항 + 프로그래밍 요구사항 + 1주차 회고글에 있는 부분을 꼼꼼히 챙기려고 노력했고 대부분은 지킨 것 같아 뿌듯하다. 

 

아쉬웠던 점

  •  기능 분리가 많이 좋아졌다고 생각했는데 하나의 함수에 한가지 일만 하도록 하지 못했다. 이 부분은 내가 코드 짜면서도 에러처리 부분이 너무 긴것 같아 함수를 따로 뺄까말까 잠시 고민했었는데 너무 과하게 나누는 거 같아서 안나눴었다. 넘 후회가 된다. 담주에는 꼭 적용할것이다. 
  • 내 기준 많이 성장했다고 생각했는데 공통 피드백에 내가 해당되는 부분이 많아 놀라기도 하고 씁쓸했다.

 

 

개선할 점

  •  gitignore에 package.json 이랑 prettier 적용하면서 만들어진 파일 등을 추가했다가 내 노트북에서 node로 실행이 안되길래 괜히 불안해서 다시 뺐다. 아마도 넣는게 맞는 것 같은데 잘 모르겠다. 이건 좀더 찾아보고 결정하는 걸로 해야겠다.

  • 다른 사람들 코드리뷰를 하면서 에러메세지나 입출력 메세지 등을 따로 constants 폴더를 만들어서 정리해둔 것을 꽤 볼 수 있었다. 생각지도 못했던 방법인데 모듈화에 더욱 도움이 될 것 같아서 나도 다음 주차에는 적용해보려고 한다.

  • MVC 패턴에 대해서 좀더 검색해보고 적용할지 말지 결정하자.
  • 기능을 구현하면서 기능 목록 업데이트하는 부분을 지속적으로 커밋하자.

  • 값을 하드코딩하지 않기
    특히 테스트코드 작성하면서 값이 하나정도로 짧은 경우 그냥 하드코딩한 경우도 있었던 것 같은데 앞으로는 꼭 상수화하자. 어떤 분처럼 constant 파일에 테스트용 입력 메세지를 미리 저장해두어도 좋을 것 같다.

  • 클래스의 필드도 활용해보기
    이건 반성이 되는게 클래스에 필드가 있다는 걸 몰랐다. 1주차에 클래스에 대해서 공부하겠다고 다짐해놓고 막상 공부한 부분은 없었던 것 같다. 이번주차에는 딥다이브 책 클래스 부분을 꼭 읽어봐야겠다.
  • 한 함수에는 한가지 기능만 하도록 하자.

  • 일반 객체도 필요하다면 효율적으로 활용해보기

  • 개발하면서 느낀점, 과정을 미리 기록해둬서 소감문에 최대한 담아낼 수 있도록 하자.

 

느낀점

2주차는 1주차보다 개선된 점은 분명히 많이 있었다. 그리고 다짐한 부분들을 대부분 지켜서 스스로 만족스럽다. 하지만 다른 사람들보다 더 잘하기 위해서는 더욱 신경쓸 부분들이 많은 것 같다.

하지만 이번주차에는 고쳐야하는건지 말것인지 고민되는 부분도 있다. 이건 다른 사람들 코드를 좀 참고하면서 어떤식으로 했는지 봐야겠다. 내가 고민되는 것은 게임의 전반적인 로직을 이끌어갈 코드도 함수화하는게 맞나 싶었는데 이런 부분을 따로 Controller 라는 클래스를 만들어서 해결하는 MVC 패턴이라는 게 있더라. 사실 디자인 패턴을 도입하는 건 잘 사용을 못하면 오히려 이도저도 아니게될까봐 꺼려지는데 명확한 이유가 있다면 사용하는게 맞지 싶어서 고민이 된다.

 

그리고 매주 이것만 매달릴 수는 없고 다른 할일들이 있으니 좀 시간이 많이 들기는 한다. 특히나 또 코딩테스트를 연습하면서 3,4주차 과제를 수행해야 하게 되어서 부담스러운데 내가 할 수 있는 최선을 다해봐야지..

3주차에는 추가된 중요한 요구사항도 잘 지킬 수 있도록 더욱 노력해야겠다. 힘내자!