layout: post
title: "사다리 게임 미션 페어프로그래밍 - 회고(1)"
date: 2022-02-22T0:00:00-00:00
author: sangyeop
categories: Sproutt-2nd
지난 레이싱 게임 미션에 이어서 이번에는 사다리 게임 구현을 동일한 페어프로그래밍 룰에 따라서 두 명씩 짝을 지어서 미션을 수행하게 되었다.
네비게이터와 드라이버
위 두 역할을 10분 마다 번갈아가며 진행하는 형식의 프로그래밍을 의미한다. 네비게이터가 드라이버에게 지시를 하지만 드라이버는 무조건 그 의견을 수용하는것이 아니라, 본인의 생각과 다르다면 어필을하고 같이 조율해 나갈 수 있다.
지난 페어프로그래밍에서는 이전에 레이싱 게임 미션을 경험해본 적이 있었던 동료와 페어를 진행해서, 빠르게 클래스를 분석하고 설계해 미션을 완성할 수 있었다. 그러나 이번 미션에서는 기능의 요구사항의 난이도가 이전 미션에 비해서 비약적으로 상향되었기 떄문에, 나누어야 하는 기능과 역할이 너무 많아졌다고 생각됐다. 이 때문에 일단 기능 요구사항 자체가 어려우니 구현을 성공시키기 위한 비즈니스 로직을 일단은 짜보자라고 생각하게 되었다.
일단은 다른걸 고려하지 않고 짜보자라고 생각했던 것이 나중에 되어서 감당하기 어려운 큰 짐이 되어서 돌아왔다. 역할과 기능을 제대로 나누지 않고 복잡한 기능요구사항들을 구현하다보니, 코드간에 의존성이 점점 강하게 얽히는 것이 보였다. 또한 이렇게 되다보니 기능 단위 테스트가 어려워졌고 테스트 코드 작성 또한 뒷 일로 미루게 되었다. 시간을 아끼기 위해서 일단은 구현을 해보자라는 생각이 구현에는 성공했지만, 리팩토링에 더 많은 시간을 들이게되는 악영향으로 되돌아오게 된 것이다.
그러나 회고에 와서야 이러한 부분이 문제였다는 것을 알게 된 것은 아니다. 이미 설계의 중요성에 대해서는 알고 있었지만, 설계에 대해서 확신과 자신감이 없었기 때문에 알면서도 이러한 방식으로 미션 수행이 이루어 졌다고 생각한다. 객체지향적 설계에 대해서 아직까지는 자신감이 없고 어렵게만 느껴지는 것 같다.
앞서 어려웠던 점에서 말했듯이 이미 알고 있었던 설계의 중요성에 대해서 뼈저리게 느낄 수 있었던 좋은 미션이었다고 생각된다. 기존 이중 for문으로 구현했던 입력된 이름과 실행결과 값을 매칭시키는 로직도 조금만 더 고민해보면 단일 for문으로 구성할 수 있다는 결론이 나왔다. 클래스를 나누는 부분에 있어서도 상태를 먼저 생각하지 말고 맡을 행동과 책임이 무엇이 있는지를 먼저 고민하고 이에 맞는 상태를 가지는 클래스 객체를 만드는 식으로 구현을 해야겠다는 것을 배웠다. <객체지향의 사실과 오해> 라는 책에서 막연히 읽었던 내용들이 이번 미션을 진행하면서 조각이 하나 둘씩 맞춰지는 기분이 들었다.
자바 8에서 제공되는 Stream을 이론적으로만 학습하고 직접 사용을 해보거나 어떤식으로 사용되어야 겠다는 생각조차 해본적이 없었는데, 이번 미션에서 리스트 타입들을 다루면서 외부 반복문이 점점 늘어나는 것이 보였다. 리팩토링 단계에서 적용하기로 미뤄두고 아직 적용하지는 못하였지만 Stream의 필요성과 가독적 유용함을 느낄수 있었다. (ArrayList에 포함된 값을 찾아 비교하려면 for문을 이용한 외부 반복문을 돌려서 4~5줄에 걸친 코드로 검증해야하지만, Stream을 이용하면 한 줄로 해결 가능했다 )
책의 종이 위에서 떠다니는 막연한 객체지향적 설계에 대한 내용을 머리로만 익힐 것이 아니라, 직접 이번 미션과 같은 프로젝트를 통해서 고민해보는 과정이 필요하다고 느꼈다. 이전에 글로써 학습된 설계에 대한 부분들이 실전에 적용해보지 않고서는 무용지물이라고 느껴졌기 때문이다. <객체지향의 사실과 오해> 라는 책에서 비교적 쉬운 비유를 통해서 객체지향적 설계를 접하고 있는데, 앞으로 진행될 미션에서는 시간이 조금 더 걸리더라도 이제껏 공부한 내용들을 바탕으로 설계에 대해서 고민하는 시간을 더 많이 갖도록 할 예정이다.
페어를 진행하면서 페어 동료에게 내가 생각한 설계 구조와 로직에 대해서 논리적으로 설명하는데 어려움을 느꼈다. 이 부분 역시 내가 생각한 구조에 대해서 확신과 자신감이 없기 때문이라고 생각한다. 이를 보완 하기 위해서 꾸준히 공부를해서 부족한 부분을 보완해야겠다는 생각이 들었다.