설계 | 설계의 중요성

여태껏 문제가 없었다해도

많은 분들이 따로 설계에 큰 공을 들이지 않고 여태껏 서브젝트를 해왔을 것이고, 저 역시 마찬가지입니다. 무작정 vscode를 켜고 구현에 들어갔습니다. 필요할 때마다 지역변수를, 구조체 변수를, 함수를 추가했습니다. 함수가 너무 길어진다 싶으면 같은 작업을 하는 코드들을 함수로 빼냈습니다. 그 때 그 때 헤더를 수정했고, 구현해가면서 필요한 메소드들을 헤더 파일에 추가하면서 개발을 해왔습니다. 끝나고 나서 여유가 있으면 코드를 한 번 다듬었습니다. 그래도 아무런 문제가 없었습니다.

그러나 여태껏 그래왔고 또 문제가 없었다고 해서, 앞으로도 그렇게 해도 된다는 뜻은 아닙니다. 우리가 실제로 일해가야 할 협업 환경, 만들어가야 할 복잡한 프로덕트들은 그런 방식에 있어 관대하지 않을 테니까요.

막무가내로 일하는 미래를 그려보면

저는 정작 그렇게 해왔지만, 만약 업무 현장에서 저와 같은 동료를 만난다고 하면 끔찍할 것 같습니다. 납득되지 않는 방식으로 마음대로 코드 흐름을 비틀고, 변수나 함수명의 네이밍 규칙들이 팀 코드 컨벤션을 따르지 않고, 또 갑자기 추가된 함수의 정체를 한 줄 한 줄 뜯어보며 이해하고 있을 스스로를 생각하면 괴롭습니다.

반면 구현 계획이 명확한 이미지로 팀원 모두에게 공유되어 있고, 협의된 흐름 안에서 협의된 기능들을 하나씩 주도적으로 맡아 개발해가는 모습을 떠올리면 즐겁습니다. 서로의 코드를 이해하지 못하고 못마땅해 논쟁하는 것이 아니라, 구현이 어려운 영역에 대해 도움을 주고받으며 유기적으로 일해가는 미래를 바랍니다.

그렇다면 설계란 무엇일까

그렇다면 설계란 무엇일까요? 에디터를 켜고 본격적인 구현에 들어가기 전에, 설계를 잘 하고 들어간다는 것은 무엇을 의미할까요? 본질적으로 얘기하면, 무엇을 어떻게 구현할 것인지에 대해 필요한 의사결정들을 미리 하는 것입니다. 어떤 객체들을 만들지, 객체 안에는 어떤 멤버 변수와 메소드를 넣을지, 객체들을 이용한 처리 흐름은 어떻게 될지 등의 전반적인 사항에 대해 결정해놓는 것입니다. 의사결정을 미리 해놓으면 헤맬 일이 없으며, 구현 단계에서는 파라미터와 리턴 인자, 기능이 명확한 함수들을 정확하고 효율적으로 구현하기 위한 알고리즘만 잘 구상하면 됩니다.

데이터로 본 설계의 중요성

저희 팀 같은 경우 bonus까지 모두 합해 서브젝트 패스까지 53일이 걸렸습니다. 처음 7일은 <학습> 단계에 소요했으며, 2일은 <실습>, 이후 9일은 <설계> 단계에 소요했습니다. 18일차가 되어서야 에디터를 켰습니다. 1차 구현을 완료하기까지 딱 6일이 걸렸습니다. 나머지 시간(29일)은 에러 수정(3일), 테스터 통과(5일), 디테일한 서브젝트 요건 충족(6일), 보너스 구현(15일) 등에 필요한 시간이었습니다. 만약 설계 단계를 충분히 가지지 않았다면, 1차 구현을 하는 데 3배 가까이의 시간이 필요했을 것입니다. 그렇게 만들어진 코드조차 깔끔하지 않았을 것이고, 그로 인해 디버깅과 에러 수정에 필요한 이후 시간 역시 훨씬 늘어났겠죠.

Last updated