우아한 테크 코스 5기 프리코스 - 1주차 회고
귀중한 배움
1주차가 끝난 뒤 작성한 회고 글입니다.
1. 진정한 프리코스가 시작하기 전의 예행연습 같았던 1주차
사실 이번 기수 테스트는 저번 기수까지 진행되었던 알고리즘 테스트가 사라진 것으로 알고 있었다. 그런데 프리코스 1주차에서 갑자기 알고리즘 문제가 튀어나와서 좀 당황했었던 기억이 있다.
여기서 좀 헷갈렸던 부분은, 완전한 알고리즘 테스트라기엔 1주일이라는 굉장히 많은 시간이 주어졌고, 그렇다고 알고리즘 테스트가 아니라고 하기엔 문제들이 알고리즘 문제 그 자체였다. 첫 날 몇 시간동안은 ‘이러한 문제들을 주신 의도가 무엇일까??’ 계속 고민했었다. 정답은 아무도 모른다.
결국 나만의 최선의 방법 으로 풀어보자고 결론을 내렸다. 처음엔 알고리즘 문제 풀듯이 절차 지향적으로 최대한 빨리 풀어보고, 그 뒤에 객체지향 설계로 발전시켜나가려고 판단했다.
처음엔 절차 지향적으로 7번 문제까지 쭉 풀었는데, 다 풀고나니 5일이라는 시간이 여전히 남아있었다. 뭔가 내가 의도한대로 계획이 흘러가는 것 같아서 좀 안심이 되는 기분이다.
2. 객체지향 설계로 리팩토링
사실 리팩토링이라고 말하기는 좀 그렇다. 절차지향적으로 구현한 코드와는 상관 없이, 처음부터 다시 도메인 설계를 하면서 구현을 했기 때문이다. 일단 우테코 문서에서 제공해주는 11가지 클린코드 원칙을 지키려고 노력했다.
- 자바 코드 컨벤션을 지키면서 프로그래밍했는가?
- 한 메서드에 오직 한 단계의 들여쓰기(indent)만 허용했는가?
- else 예약어를 쓰지 않았는가?
- 모든 원시값과 문자열을 포장했는가?
- 콜렉션에 대해 일급 콜렉션을 적용했는가?
- 3개 이상의 인스턴스 변수를 가진 클래스를 구현하지 않았는가?
- getter/setter 없이 구현했는가?
- 메소드의 인자 수를 제한했는가?
- 코드 한 줄에 점(.)을 하나만 허용했는가?
- 메소드가 한가지 일만 담당하도록 구현했는가?
- 클래스를 작게 유지하기 위해 노력했는가?
이 11가지 원칙을 지키면서 굉장히 많은 것을 배웠다. 그래서 그런지 이렇게 설계해보면서 풀기를 잘했다는 생각이 든다. 밑의 링크들은 1주차 과정에서 배웠던 내용들 중 가장 인상 깊었던 부분들을 간추려서 정리한 글이다.
- 우아한 테크 코스 5기 프리코스 1주차 - 제네릭 타입과 오버로딩의 연관성
- 우아한 테크 코스 5기 프리코스 1주차 - 도메인 간의 getter사용을 없애자
- 우아한 테크 코스 5기 프리코스 1주차 - List로 add() 했을 때 UnsupportedOperationException 발생하는 이유
3. 개발 방법에 정답은 없다.
1주차 미션이 끝나고 2주차 미션이 시작하기 전에 코수타(코치와 수다 타입)이 진행되었다. 여기서 아주 인상깊은 중요한 부분의 깨달음이 있었다. 문제의 기능 요구사항과 제한사항에 왜이렇게 허점이 많은지 의아했었는데, 역시나 출제자 분들의 의도였다.
이러한 정답이 없는 요구사항들에 대해 우리는 어떻게 반응하고 어떻게 해결해 나갈 것인지, 스스로의 길을 개척해 나가는 것이 가장 중요한 요소라는 것을 다시 한번 깨닫게 된다.
이제는 정답이 꼭 있다고 생각해서 그 정답이 무엇인지 알아내려고 하는 것보다, 막연한 문제에 직면했을 때 나 혼자 최선의 판단을 내리려고 노력해 나가는 행동을 내 습관으로 만들어야 겠다는 중요한 깨달음을 얻었다. 물론, 정답이 없는 와중에도 최선의 길을 찾기위한 건설적인 토론은 좋다.