코드 스멜

코드 스멜이란 문제 있는 코드에서 보이는 현상을 지칭하는데, 게임 코드를 리뷰하면서 가장 많이 발견한 코드 스멜은 Primitive Obsession입니다.

Primitive Obsession은 쉽게 말해 class나 struct를 선언하는 대신 int, double, string 같은 기본적인 타입만 사용해서 프로그램 내 모든 데이터를 표현하는 것을 의미합니다. 특히, 여러 필드와 메소드를 가지는 class를 선언해야 하는 상황에도 string에 모든 데이터를 인코딩해서 넣고, 메소드는 갈 곳 없이 코드 여기저기 흩어져 있는 경우를 자주 발견하였습니다.

Primitive Obsession을 포함하여 여러 코드 스멜이 나오는 과정을 보면 흥미롭습니다. 처음부터 문제 있는 코드를 작성하는 경우는 생각보다 드뭅니다. 프로젝트 초기에는 시간도 충분히 있고, 요구사항도 복잡하지 않기 때문에 나름의 설계도 하고 class도 적절하게 만들게 됩니다.

문제는 게임 기획 변경으로 새로운 요구사항이 나오면 이 요구사항을 수용할 수 있게 기존 코드를 어느 정도 리팩토링하는 과정이 필요한데, 대게의 개발자들은 구조 변경 없이 최소한의 변경만으로 해당 요구사항만 어떻게든 구현하고 싶어합니다. 당연히 새로운 클래스를 만드는 일도 꺼리기 마련이고, 적당히 string 타입으로 현재 존재하는 클래스 어딘가에 필드로 추가하게 됩니다.

코드에 문제가 있다고 생각되면 그때 그때 정리하는 작업이 그래서 중요합니다. 새로운 요구사항이 나오면 현재 코드가 이 요구사항을 구현하기에 적당한지 먼저 판단하고 기존 코드를 유연하게 바꾸는 작업이 선행되어야 합니다. 코드 정리가 시간 있어야만 할 수 있는 사치가 아니라, 앞으로 남은 프로젝트 기간을 단축시켜 주는 유일한 방법임도 깨달아야 합니다.

Advertisements