
2주 차 회고록
어느덧 우테코 프리코스 2주차가 끝났습니다. 2주라는 짧은 시간 동안 다른 사람들의 코드와 의견을 보고 주고 받으며 느낀점과 2주차 과제를 진행하며 생각한 점을 회고록을 통해 정리하고 다시 한번 생각해보는 시간을 가지려 합니다.
2주차 과제 목표
얼렁뚱땅 1주차 과제를 제출하고 2주차 과제인 자동차 경주가 나왔습니다. 1주차에서는 인적성 검사, 자기소개서 등 이유로(사실 핑계......) 예제 테스트만 통과하자는 생각을 가지고 만들었습니다. 하지만 1주차 제출 후 다른 사람의 코드를 리뷰하며 저번 과제에서 부족한 점이 많다고 느끼고, 이렇게 하다가는 우테코는 둘째치고 프리코스 기간동안에도 얻는 것이 없을 것 같다는 생각이 들었습니다. 그래서 2주차 과제에서는 완성도를 위해서 다음과 같은 목표를 세웠습니다.
- 1주차 과제 공통 피드백을 적극적으로 반영하자.
- Java는 객체지향 언어이다. 고로 객체지향의 개념을 확실히하고 반영하자.
- MVC pattern을 도입하자.
2주차 과제 진행 과정
먼저 과제를 하기 전에 세웠던 목표를 위해서 1주차 공통 피드백과 강의 영상을 봤습니다.
피드백과 강의 내용 중 여러가지 내용이 있었지만 제가 집중한건 들여쓰기를 3 depth 이상 하지 말기와 강의에서 구현을 할 때 요구사항을 세세하게 단계적으로 반영하며 구현하는 것이였습니다.
처음에는 2가지 경우가 다른 것을 요구하는 것이라고 생각했지만, 설계와 코딩을 해보니 결국 2가지가 의미하는 바는 "메서드를 작은 단위로 나누어 메서드 당 하나의 책임을 지게해라" 라는 말로 귀결된다고 생각했습니다.
그래서 코딩을 하기전에 객체지향에 대한 공부를 먼저 해야겠다는 생각을 했고 구글링과 "객체지향의 사실과 오해" 책을 보며 객체지향에 대하여 다시 한번 생각해보는 시간을 가졌습니다. 그 과정에서 객체지향의 진정한 의미가 객체가 아닌 객체들이 하나의 기능을 위한 협력이라고 배웠습니다.
그렇게 처음부터 다시 협력을 중심으로 다시 설계를 했습니다. 처음 설계에서는 어떻게 만들어야 객체지향적으로 만들고 잘 읽히는 코드를 만들 수 있을까에 집중하다보니 오히려 설계가 잘 안되었습니다. 하지만 프로그램 요구 사항에 나온 입력, 경주 기능에 집중하여 설계를 하니 어떤 기능(동작)을 만들어야 하는지 나왔고, 그에 따라서 어떤 객체가 있어야 하는지 자연스럽게 만들어졌습니다. 그러고 나니 처음 설계와 달리 MVC 패턴을 적용하는 것도 훨씬 수월했습니다.
이런 학습 과정과 코드 리뷰를 하면서 읽기 좋은 코드, 디자인 패턴을 잘 적용한 코드 등 다양한 코드를 봤습니다. 이런 코드를 보며 공통적으로 객체지향에 대한 개념과 적용이 확실히 되었다고 느꼈고 디자인 패턴, 클린 코드를 적용하기 전에 Java의 객체지향에 대한 학습을 확실히 하는 것이 먼저라고 느꼈습니다.
과제 제출 후 아쉬운 점과 다음 과제 목표
과제를 제출하고 확실히 발전했다고 생각했지만 다른 분들의 코드를 보니 아쉬운 점이 많았습니다. 아무래도 객체지향적인 코드를 오랜만에 만들다 보니 제 코드의 부족한점이 많이 보였습니다. 특히, 다른 분들은 효율적이고 확장성 좋은 코드를 만들기 위해서 메서드와 변수 이름부터 테스트 코드, 의존성 주입, 클래스 분리, 정적 팩토리 메서드 등 코드를 위해 고려할 수 있는 다양한 포인트들이 있다고 느꼈습니다. 이 외에도 여러 아쉬운 점이 있어서 다음 3주차 과제에서는 다음과 같은 목표를 가지고 할 것입니다.
- 객체지향 설계를 머리 속 말고 실제 문서로 하기
항상 머리 속으로 설계를 하고 무작정 코딩을 습관이 있었습니다. 하지만 제대로된 객체지향 프로그램을 만들려면 머리 속이 아닌 실제 문서로 설계를 어느정도 하고 만드는 것이 훨씬 효율적이라 생각해서 3주차 과제 부터는 문서화 해볼 계획입니다.
- 객체지향의 5원칙 지키면서 코딩하기
이전 과제에서는 객체지향의 개념만이라도 살리자는 생각으로 5원칙은 생각하지 않고 구현했습니다. 하지만 이제 하나의 과제를 그렇게 해봤으니 이번에는 거기에 더해서 5원칙 그 중 SRP에 최대한 집중하며 구현해볼 생각입니다.
- TDD 기반으로 프로그램 제작하기
사실 이전까지 TDD의 필요성을 느끼지 못했습니다. 하지만 코드 리뷰를 하며 제가 생각하지 못한 기능이나 예외가 있었고 TDD에 대한 필요성을 느꼈습니다. 또한, 작은 단위로 테스트를 해보면 작은 단위의 메서드가 자연스럽게 만들어지므로 TDD에 도전해볼 것입니다.
- Git 최대한 활용하기
이전까지는 팀 프로젝트를 하더라도 백엔드 파트는 거의 혼자 만들어서 Git에 익숙하지 않았습니다. 그래서 이번 과제를 진행할 때도 git commit 을 잘 하지 않으며 했습니다. 하지만 코드리뷰를 하며, git commit 메세지를 통해 이 사람이 어떤 생각을 가지고 만들었는지 보이면서 git commit에 대한 중요성을 배웠습니다. 그래서 이번과제에서는 최대한 git commit message를 통해서 다른 사람과 소통할 수 있는 코드를 만들 계획입니다.
- 2주차 공통 피드백 무조건 지키기
2주차 공통 피드백은 전부 코드와 관련된 내용인 만큼 무조건 지키면서 구현하는 것이 목표입니다. 특히, 작은 단위의 테스트를 먼저 만들고 그에 따라서 메서드를 만드는 것을 중점적으로 해볼 것입니다.
중반을 지나며 느낀 점
학교에서 Java 수업을 듣긴 했지만 Java에 대한 숙련도는 거의 없었습니다. 특히, Java를 코딩 테스트를 위한 언어로만 생각을 하여 나만 이해할 수 있는 코드로 만든 적이 많았습니다. 하지만 이번 프리코스 과제를 하고 코드 리뷰를 주고 받으며 Java와 객체지향에 대한 이해도가 많이 부족하다는 것을 배웠습니다. 이렇게 다른 사람을 위한 코드를 만들면서 내가 부족한 부분이 무엇이고 개발을 하며 놓친 부분이 무엇인지 확실하게 인지했습니다.
처음 우테코 지원 당시 막연하게 프리코스와 커뮤니티를 통해서 성장을 하겠다고 했는데, 2개의 과제를 하다보니 어떤 부분을 배우고 성장해야 할지 명확하게 알게되었습니다. 만약 우테코 프리코스에서 통과를 하지 못한다고 하더라도 이미 프리코스를 통해서 배운점과 동기부여를 많이 얻어서 프리코스에 지원하기 잘했다고 느끼고 있습니다. 남은 2개의 과제에서도 조금씩이라도 착실히 배우고 성장하여 4주 전과는 다른 상태가 되고자 노력하겠습니다.
'기타' 카테고리의 다른 글
| [우테코 프리코스] 3주차 과제 회고록 - 로또 (2) | 2024.11.07 |
|---|---|
| [우테코 프리코스] 1주차 회고 - 문자열 덧셈 계산기 (0) | 2024.10.23 |