본문 바로가기
개발 일기

우테코 프리코스 회고(10.26~11.22)

by moonstal 2022. 11. 26.

회고

성취감

4주간의 우테코 프리코스가 끝났다! 11월 22일 23시 55분 학교 도서관에 남아 제출을 마무리했다..! 미션을 모두 끝냈다는 생각에 너무 뿌듯하고 뭐든 할 수 있을 것만 같았다. (그 감정은 자고 일어나니까 사라졌다.) 하나의 미션에 주어지는 시간이 일주일이었는데 그중에 반은 나 자신과 싸우는데 썼다. ‘난 못해…’라는 생각이 자꾸 들었고, 정말 코딩에 미쳐있는 사람들이 많았는데(커밋 100개..) 나는 그렇지 않다는 생각이 들었다. 나만 그런가 싶어 슬랙을 눈팅하면서 위안을 얻기도하고 그러다 마감기한이 다가오면 해내야 한다는 생각으로 바뀌었다. 못하면 나한테 지는 것 같았고, 못한다고 생각했던 걸 해냈을 때의 성취감은 중독성이 있었다. 특히 마지막 미션의 성취감은 정말 미쳤다.

성장

우테코 프리코스를 하기 전 넥스트스텝을 마무리하고 블로그에 정리한 뒤 좀 더 나은 실력으로 프리코스를 진행하겠다는 야심찬 계획이 있었지만 미션 구현은 생각보다 쉽지 않았고 동시에 진행하게 되었다. 한달 동안 미션에 허우적거리면서 자신감이 떨어졌다가 해냈을 때 기분 최고를 찍고 기분이 왔다갔다했다. 넥스트스텝의 로또 미션이 끝나고 난 뒤 바로 우테코 3주차에 로또 미션을 구현하게 되기도.. 덕분에 또 다시 구현을 하면서 시도하지 않았던 로또 번호 캐싱을 해보기도 했다. 미션을 하면서 많이 성장하는 것 같다. 특히 해보지 않았던 것을 시도할 때!

피어리뷰

그리고 마지막에 참여했던 피어리뷰! 너무 재미있었고 리뷰하면서 배운다는게 뭔지 이해했다. 넥스트스텝의 리뷰어분들 빙의해서 리뷰하고 싶었는데 생각보다 남의 코드를 리뷰해주는 것은 이해하는 것도 어렵고 시간이 많이 들어가는 일이었다. 리뷰하려고 들어가보면 나보다 잘해서 오히려 배우고 나온 경우도 많았고 코멘트를 적으려다가 정확한 내용인지 다시 찾아보기도 했다. 또 내 코드를 봐주는 사람이 있어서 좋았다. 남들과 비교하면 끝이 없고 따라할 수 있는 것부터 배워나가야겠다는 깨달음을 얻었다.

앞으로

앞으로 할 것은 넥스트 스텝 볼링미션 끝내기…(막막하다) 수강기간은 끝나버렸지만 2달간은 포비님께서 머지를 해주신다고 하셨다. 꼭 마무리 하고 싶다 그 후에는 미션 피드백 블로그에 정리하고 미션 다시 구현해보기.

 

정말 바로바로 안하면 진짜 안하게 된다. 지금이라도, 완벽하지 않더라도 무엇이든 하는게 좋다는 생각이 들었다. 그래서 지금 회고를 썼다.

 

(밑에는 지금까지 우테코 프리코스 기간동안 미션을 진행하면서 작성했던 글과 pr이다.)

2주차 숫자야구

목표: 함수 분리, 함수별 테스트 작성

7개월 전 넥스트 스텝의 자바 플레이그라운드 with TDD, 클린코드를 시작했을 때 첫 미션이 숫자 야구 게임을 구현하는 것이었습니다. 그 당시 그냥 구현하기도 어려워서 가장 쉬운 방식으로 만들어 보았었습니다. 현재 다시 구현하면서 그때의 코드와 비교를 했을 때 성장을 했다는 것을 느낄 수 있었습니다. 이전에는 사용자와 컴퓨터 볼을 통째로 비교했었고, Balls라는 공통적인 특징을 무시한 채 UserBalls클래스와 ComputerBalls라는 클래스를 만들었습니다.

 

이번에 구현하면서 테스트할 수 있는 작은 단위로 클래스를 쪼개는 것을 중점적으로 생각하였습니다. Ball이라는 클래스를 만들면서 작은 단위로 테스트 할 수 있었고 Ball에 맞는 로직을 한곳으로 모을 수 있었습니다. 또 Balls라는 클래스를 통해 컴퓨터 볼과 유저의 볼을 공통으로 표현할 수 있었습니다.

 

이번 미션을 진행하면서 실력이 느는 게 바로 보이지 않더라도 조급해하지 않고 꾸준히 하다 보면 어느새 늘어있을 것이라는 믿음을 갖게 되었습니다. 또 미션을 반복해서 구현해보는 것이 중요하다고 알고 있었지만 실행하는 것은 쉽지 않았습니다. 프리코스를 통해 이런 환경을 만들 수 있었고 다시 구현해보는 것의 중요성을 깨달을 수 있었습니다.

3주차 로또

목표: 클래스(객체) 분리, 도메인 로직에 대한 단위 테스트 작성

클래스를 분리하는 연습을 하면서 아무리 작은 객체여도 각자의 역할이 있고, 클래스를 분리했을 때 기능구현이 더 쉬워진다는 것을 느낄 수 있었습니다. 상위 객체에서 하위 객체에게 메시지를 보내면서 협력 시켰을 때 읽기 좋은 코드가 되었던 것 같습니다.

 

그동안 생성자를 만들 때 외부에서 알맞는 타입으로 변경하여 주입하는 방식으로 설계를 했었는데 이번에는 객체를 사용하는 입장에서 생각하여 String 값을 받고 내부에서 변환하는 방식으로 구현하였습니다. 그 결과 도메인 로직에 대한 단위 테스트를 작성할 때도 쉽게 객체를 생성할 수 있어서 편하게 테스트할 객체를 만들 수 있었습니다.

 

단위 테스트를 진행하면서 빠른 피드백을 얻을 수 있었고 예외 케이스에 대한 검증도 할 수 있었습니다. 또 한 부분의 로직을 변경하였을 때 다른 곳에 영향이 가는지 바로 확인 할 수 있어서 코드 변경에 대한 두려움이 낮아지는 것을 느낄 수 있었습니다.

4주차 다리 건너기

목표: 클래스(객체)를 분리, 리팩터링

이번 미션은 지난 미션과 달리 도메인에 대한 지식이 없어서 처음 구현할 때는 미션 내용에 따라 기능이 작동하도록 무작정 구현했습니다. 그 결과 메서드의 길이는 10줄을 훨씬 넘겼고, indent는 3까지 들어가기도 했습니다. 리팩토링을 진행하면서 메서드를 기능 단위로 분리하였고 자연스럽게 indent가 줄어드는 경험을 했습니다.

 

사용자의 입력을 다시 받기 위해 try-catch문을 사용했는데 메서드의 길이를 10줄이라는 제한사항을 만족시키는 것이 어려웠습니다. 10줄에 맞추기 위해 메서드를 분리하긴 했지만 의미 있는 기능 단위로 분리한 느낌보다는 제한사항을 위해 분리했다고 느껴졌던 것 같습니다.

 

핵심이 되는 클래스와 메서드가 제시되어있어서 구현해야 할 기능이 명확하게 다가왔습니다. 객체의 역할을 잘 파악하는 것이 중요하다고 느꼈고 인터페이스를 통해 다리 생성에 대한 테스트를 진행할 수 있는 구조여서 테스트하기 좋은 코드에 대해 다시 생각해보는 계기가 되었습니다.

 

마지막으로 갈수록 잘하는 사람도 많은 것 같아 자신감이 떨어지기도 하고 구현을 못 해서 막막해하기도 했는데 완주를 목표로 진행한 결과 너무 뿌듯하고 한계를 이겨내고 성장할 수 있는 계기가 되었습니다. 모두에게 프리코스 참여할 수 있는 기회 주셔서 정말 감사합니다.

'개발 일기' 카테고리의 다른 글

2023 상반기 회고  (0) 2023.06.10
2022년 회고  (6) 2023.01.07
프로그래머스 맥스(한기용)님 라이브세션 후기  (0) 2022.07.15
인프랩 CTO 이동욱님과의 멘토링(2)  (0) 2022.06.06
첫 코딩테스트 후기  (0) 2022.04.02