이번 5기에서는 이전의 프리코스가 3주 차에서 4주 차로 늘어난 것뿐만 아니라 달라진 점이 하나 더 있다. 바로 프리코스 커뮤니티이다.
프리코스 커뮤니티는 우아한테크코스 지원자들이 함께 학습하고 성장할 수 있는 공간입니다. 프리코스 커뮤니티에는 다른 지원자들과 함께 할 수 있는 여러 활동이 있습니다. 지원자들에게 권장하는 활동은 피어 리뷰, 아고라(토론 및 질의응답), 학습 컨텐츠 공유이며 이 활동이 아니더라도 함께 학습하고 성장할 수 있는 것은 무엇이든 좋습니다. 프리코스 커뮤니티는 지원자 여러분이 스스로 만들어가는 공간입니다. 단, 우리 모두의 스스로 할 기회를 위해 아직 마감되지 않은 미션에 관련된 질문과 답변은 마감 이후로 미뤄주세요. https://github.com/orgs/woowacourse-precourse/discussions
프리코스가 우아한 테크 코스의 교육을 맛 볼수 있다면, 커뮤니티는 깃허브 디스커션에 프리코스에 참여하는 사람들이 모여서 코드 리뷰, 토론, 학습 컨텐츠 공유, 회고록 공유 등의 활동으로 우아한 테크 코스의 생활을 맛볼 수 있다.
나 또한 이번 주차에는 프리코스에 참여하여 코드 리뷰, 토론 활동, 피어 리뷰, 회고록 공유등으로 많은 것을 배우고 느낄 수 있었다.
이번 2주차 역시 TDD로 개발을 도전하였다. 나는 새로운 인사이트를 얻고자 프리코스 전 과정과 최종 테스트까지 TDD로 개발을 진행하기로 도전하였다.
TDD로 작은 기능 단위로 먼저 개발을 하다 보니 isStrike, isBall 메소드의 테스트를 먼저 작성하였고, 이 메소드들은 public으로 열러 있었다. 하지만 진행하면서 이 메소드들은 결국 match라는 메소드 안에서만 쓰인다는 것을 인지하였고, 1주 차에서 다짐했던 회고를 토대로 public으로 열러 있던 isStrike, isBall 메소드들을 private으로 리팩토링하고 해당 테스트 코드를 삭제하였다.
해당 테스트 코드를 삭제하였지만, 이전에 작성했던 match 메소드의 테스트 코드를 통해서 isStrike, isBall을 간접 테스트를 하고 있기 때문에 private으로 바꾸고, 기존 테스트를 삭제하는 과감한 리팩토링에도 두려움이 없었다.
이러한 과감한 리팩토링에도 테스트를 통한 빠른 피드백이 가능해 두려움 없이 리팩토링을 진행할 수 있다는 점이 TDD의 장점이었다.
2. 2주차 - TDD에 대한 인사이트
TDD로 미션을 진행하면서 특정 기능에 대한 실패하는 테스트 코드를 작성하고, 이를 성공시키기 위한 프로덕션 코드를 구현하는데 너무 많은 시간과 노동이 걸려서 TDD의 장점을 이용하지 못했던 부분이 있었다. 테스트 코드의 빠른 피드백을 받지 못해서 프로덕션 코드만 장시간 주구장창 만지는 나를 보게 되었다. 결국 기능을 더 작은 단위로 더 쪼개서 기능 목록을 리팩토링하고, 다시 개발을 진행하게 되었다.
나는 이러한 점 역시 TDD의 장점이라고 생각한다. TDD를 진행하며 기능을 더 작은 단위로 쪼개지 않았더라면, 어떻게든 기능을 구현하기 위해 프로덕션 코드를 주구장창 개발하여 결국 쓰레기 코드가 완성됐을 것이다. 하지만 TDD로 기능을 더 작은 기능으로 쪼개어(기능 구현 목록 수정) 다시 접근하게 되었고, 이로 인해 클래스 설계도 더 나은 객체지향적인 설계로 자연스럽게 유도되고 있음을 느꼈다.
TDD로 개발하지 않았더라면 이러한 클래스와, 메소드 설계는 생각도 못했을 것 같다.
결과적으로 해당 도메인에 대하여 객체지향적인 사고가 부족할 경우, TDD로 인해 더 나은 설계 방향으로 나아갈 수 있다고 생각한다.
결과적으로 2주 차를 TDD로 개발을 진행해본 결과 느낀 점을 정리해보자면,
완성한 기능에 대한 테스트 코드가 개발 중에 항상 존재하기 때문에 리팩토링 시에 두려움이 없다.(테스트를 통한 빠른 피드백을 통해 부담 없이, 버그 발생 가능성을 줄여 리팩토링 할 수 있다.)
해당 도메인에 대하여 객체지향적인 사고가 부족할 경우, TDD로 인해 더 나은 설계 방향으로 나아갈 수 있다.
3. 프리코스 커뮤니티(아고라)를 통해 느낀 점
프리코스 디스커션을 보는 중에 1주차에 내가 했던 고민인 "private 메소드 테스트"에 대해서 고민하고 있는 동료를 발견하였다. 따라서 1주 차에서 내가 해당 주제에 대해서 공부했던 다양한 사람들의 의견과 자료, 나의 생각을 정리해서 공유하였다.
나는 이러이러한 이유로 "테스트를 위한 생성자까지는 괜찮다고 생각한다."는 의견을 남겼다. 하지만 나의 의견에 공감을 해주는 사람이 있는 반면에 반대의 의견을 제시하는 사람도 있었다.
머리를 한대 딱! 맞는 느낌이었다. 지금까지 내가 생각해왔던 점이 잘못된 부분이 있음을 인지했다. 물론 특정 상황에서는 나의 의견이 좋을 수도 있지만, 다른 특정 상황에서 발생할 수 있는 단점에 대해서는 전혀 생각해보지 못했던 부분을 알게 되었다.
혼자 공부하고 있었다면, 해당 의견을 듣지도 못했을 것이다. 해당 토론을 통해서 새로운 인사이트를 얻을 수 있었고, 한층 성장할 수 있었다. 나의 의견을 공유하고, 다른 사람의 의견을 받아들이며 토론하는 과정에서 함께 성장하는 힘은 대단한 것 같다. 사람은 완벽하지 않기에 우테코를 통해 서로의 부족한 점을 이끌고, 이끌리며 함께 성장하는 경험을 꼭 하고 싶다는 생각이 들었다.
4. 프리코스 커뮤니티(피어 리뷰)를 통해 느낀 점
1주 차에 진행한 미션에 대해 나의 코드를 리뷰받을 수 있었고, 또한 내가 다른 사람의 코드를 리뷰해줄 수 있었다.
나는 프리 코스를 통해 깃허브를 통한 코드 리뷰는 처음 경험해보며 이번 주차에는 세 분에게 리뷰를 받을 수 있었고, 나 또한 세 분에게 리뷰를 해주었다. 다음 주차에는 더 많은 분들의 코드를 보고 배우며, 리뷰를 하려고 한다.