10월 22 ~ 10월 28일 까지 우테코 프리코스 2주차 미션으로 [자동차 경주] 구현 미션을 진행 하였습니다. 이에 대한 회고를 작성합니다.
목표 설정
1주차 보다 더 나은 코드로 발전하는 것이 목표였다. 목표를 달성하기 위해서 내가 학습했던 내용을 적용해보고 계속적으로 학습을 진행했다.
지난주에 학습했던 TDD를 적용하려 노력했다. 내가 알게 된 것을 적용해보는 것이 학습의 목표라고 생각하기 때문이다. 또한 객체지향 프로그래밍에 대해서 생각하게 되었다. 객체지향에 대해서 찾아보게 되었고, 자바 인 액션 책과 오브젝트 라는 책을 공부하기 시작했다. 그 과정에서 동작 파라미터에 대해서 알게 되었으며 추상화를 통한 객체지향 프로그래밍에 대해 한 발 더 나아갔다.
경험
코드를 작성하다 보면 어느 순간 내가 의도했던 코드인가 의문이 들었다. 무아지경에 빠져 의도에서 벗어난 코드를 작성하고 있었다. 예를 들어 나는 입/출력 하는 부분을 추상화해서 요구사항의 변경에 유연하게 대처할 수 있도록 하는 코드를 작성하고 싶었다. 목적은 좋았으나 추상화하는 방법에 대해서는 무지했고, 점점 의도와 멀어졌다. 출력하는 부분을 관리하는 클래스를 만든 이유, 싱글톤으로 구현한 이유는 의도없는 쓰레기 같은 코드가 되었다.
스스로도 이 부분에 대해 질문이 들어오면 할 말이 없다는 것을 느꼈고, 실제 질문에 대한 답변을 할 수 없었다. 굉장히 창피하지만 어쩔 것인가.. 이 또한 성장하는 과정이라고 생각하기로 해버렸다.
배운점
이번 주에 배운점은 객체지향이다. 가장 기억에 남는 부분은 입/출력 코드를 리팩터하는 과정이다. 처음에는 if else 구문을 통해 들어온 객체 (String, File)을 통해 분기하여 처리하는 구문을 작성한다. 이는 메서드 안에서 반복과 길이가 길어진다. 어떤 방법을 적용해야 하는지 매우 혼란스러웠다.
학습을 통해 코드를 매개변수로 넘기는 방법을 이용해서 메서드 안에 처리하는 방법을 함께 전달하는 방법을 배웠다. 같이 코드 리뷰하는 분의 코드가 추상화를 통해 코드를 매개변수로 넘기는 방법이 인상적이였다.
어려웠던 점
기능 구현을 완성 후 학습했던 내용을 적용하려다 보니, 모든 코드가 마음에 들지 않았고 모든 코드를 폐기하고 다시 작성을 하고 싶은 생각이 들게 되었다. 왜 어플리케이션을 만들고 뒤엎는지 느끼게 되었다.
이 과정에서 어떻게 할지 고민하였다. 이번 주 코드를 다시 처음부터 작성할 것인가? 아니면 학습을 조금 더 해서 다음 주 코드에 적용해볼까? 나는 이번 주 내가 최선을 다했던 코드는 나두고 조금 더 학습을 진행해서 다음 주 과제에 적용하는 것을 선택했다.
느낀점
실패하는 코드에서 성공하는 코드로, 리팩터하는 과정을 거쳐 진행되는 TDD는 애플리케이션을 단단하게 만든다. 한편으로는 이런 생각을 하게 된다. 우테코 마지막 기능 구현에서는 제한된 시간 안에 기능을 구현해야 하는데 TDD를 적용해야 하는 걸까?
나는 이미 답을 알고 있다. 돌아가는 쓰레기를 먼저 만드는게 제한된 시간 안에 기능 구현하는 데에 났다는 것을. 하지만 프리코스는 다르다고 생각한다. 일주일 동안 주어진 시간 동안 요구사항을 충족하는 애플리케이션을 만들면 되기 때문이다. 이전 국비교육 과정에서 돌아가는 쓰레기를 재빨리 만드는 것은 경험했다. 그렇기에 프리코스에서는 시간을 들여 학습한 것을 적용하고, 고민해보는 시간을 가져야 한다고 생각한다.
오늘도 열심히