학부시절 유행하던 말이 있었다. 이른바 “CV신공”.
쫓기는 기말때에 어김없이 몰아치는 텀프로젝트의 폭풍우 앞에서 가련한 학부생들은 째다 붙이기라는 기술의 연마를 통해 학점을 딸 수 밖에 없었다. 그리하야 컨트롤키와 C, V키가 닳아서 없어질 정도로(?) Ctrl-C / Ctrl-V 를 눌러댔다. 이래서 생긴 말이 CV신공.
어느덧 시간이 흘러, 회사에 입사하고 열심히 코드를 작성하다 보니 언제부터인가 코드를 복사해서 붙이는 것이 아닌, 코드를 잘라서 붙여놓고 다시 가져다 쓰는 형태로 작업이 바뀌어 있었다. 이제 CV신공이 아니라 Ctrl-X / Ctrl-V를 반복해서 사용하는 XV신공이라 부름직 하다.
Refactoring이라고 부르는 멋들어진 단어를 갖다 붙이지 않더라도, 우선 XV신공은 대단한 위력을 지닌다. 코드의 볼륨을 키우지 않고도 재사용성을 높일 뿐 아니라, 문제가 생겼을 때 이를 추적하고 수정하는 일 역시 간단하게 바꾸어 주는 것이다.
XV신공의 진가는 이 기술을 시전하다 보면, 언제 시전할지 예측이 되며 예측이 될때 미리 시전해 둔다는 점이다. 미리미리 해두면, 코드의 작성 시간은 점점 줄어들며 이를 반복하다 보면 어느새인가 쓸만한 라이브러리들이 만들어져 있다. XV신공에 의해 체득되는 예측력은 이를 가능하게 하는 원동력이다.
또한, STL을 사용해 작업을 하다 보면 컨테이너에 루프를 돌거나 특정 값을 찾아서 어떤 일을 해야하는 경우가 많은데 이런 경우에 XV신공은 더더욱 위력을 발휘한다. STL의 알고리즘을 사용하게 되면, 특정 비교 작업이나 특정 처리 작업들을 자연스럽게 함수자/함수/멤버함수의 형태로 만들게 되고, 이는 매번 루프를 타이핑 하는 양을 획기적으로 줄여준다.
CV신공이 그 코드량을 빠르고 편하게 늘려 거대한 괴물을 양산하는 완성품 생산형 체제라면, XV신공은 코드의 증가량을 최대한 억제하면서 복잡하지 않은 코드를 만들고 코드가 재사용될 확률을 높이는 부품 생산형 체제라고 볼 수 있다.
XV신공을 사용하게 될 경우, 대부분 잘라낸 코드는 함수형태로 만들게 된다. 이 시점부터 함수의 이름이 엄청나게 중요해진다. 함수의 이름을 잘 지어야, 코드의 가독성이 올라간다. 이름을 잘 짓지 못하면, 차라리 CV신공이 나을 수도 있다. – 이름은 적당히 길어야 좋다. 에디터의 자동완성 기능을 믿자. –
XV신공에 의해 생성된 함수-실행단위들은 여러가지 부가적인 효과들을 가져온다. 특정 로직의 진입점에 대한 제어가 명확해지므로 동시성의 처리가 편해진다. 이미 기 작성된 로직과 같은 기능을 하는 다른 로직을 테스트해보거나 옵션 처리로 작업을 시켜야 할때도 역시 편하다. 최적화를 시켜야할 포인트를 찾는 것 역시 편해진다. 적절히 잘라진 함수-실행단위들은 프로파일러들을 통해 수행시간을 측정할 수 있으며, 이는 CV에 의해 생성된 거대한 코드를 디버깅하는 것과는 차원이 다르다고 할 수 있다. 범위가 좁혀지는 것 만으로도 수사망은 더 확고해 지기 마련이므로.
프로젝트 마감시일이 급박한데 어찌 여유있게 저런 일을 할 수 있느냐고 생각할 수 있지만, 결국은 버릇이다. 습관화된 XV신공은 CV신공보다 요구하는 시간이 그리 크지 않다. 대신 얻는 것은 눈에 보이듯 뻔한 일이다. 편한게 좋은 것 아니겠는가. 하하.
ps. C++에는 inline이란 아주 멋들어진 녀석이 있어서, 함수호출비용 같은건 머릿속에서 날려버린지 오래랍니다. 키힛.