비즈니스 요구 로직 함수로 추출하기
재사용하거나 확장해야 할 유틸 성 모듈이 아닌 비즈니스 요구사항을 구현해놓은 코드 더미를 흔히 접한다. 제대로 된 코멘트한 줄 조차 없는 코드 더미는 유지보수가 불가능하게 만드는 대표적인 ‘악성 레거시’이다. 비즈니스 요구사항은 시간에 의존한다. 조건이 추가되거나 아예 없어지기도 한다. 이런 요구가 들어왔을 때 코드 더미는 일을 진행할 수 없게 만든다. 간신히 삼을 수 있는 해결책이라고 해봐야 조건 분기에 따른 새로운 비즈니스 로직을 함수로 묶어 기존 코드 더미 뒤에 추가하는, 소위 ‘방어적 코드’를 작성할 수밖에 없다. 레거시를 쌓는 것이다.
이런 문제에서 해결될 방법은 역시 코드를 의미론적 단위로 묶은 함수로 만드는 것이다. 그리고 그 함수의 이름은 반드시 목적이 명확하게, 사람이 언어로 이해할 수 있도록 만들어야 한다. 함수 이름만 보고도 어떤 비즈니스 요구사항이 있었는지 명확히 드러나야 한다. 안타깝게도 숙련된 개발자들 조차도 이 부분에 그다지 신경 쓰지 않는다. 비즈니스 로직 구현은 유틸리티를 만드는 일에 비해 아무 의미가 없다고 생각하기 때문이다. 아마 재사용이나 확장이 불가능하기 때문일 것이다. 일회성 코드 작성은 어쩐지 단순노동 같이 느껴지는 것이 또한 사실이다. 이러한 관점에서 비즈니스 로직 작성이 개발자에게 전혀 흥미가 생기지 않는 작업임에는 분명하다. 하지만 카메라와 조명, 의상과 배우가 있다고 해도 시나리오가 없으면 드라마가 만들어질 수 없듯이, 비즈니스 로직 없이는 서비스도 존재할 수 없다. 개발은 서비스가 목적이므로 그 최전선에 있는 비즈니스 로직을 잘, 유지보수 가능하도록 만드는 일은 매우 중요한 일임을 명심해야 한다.
마틴 파울러의 책 ‘리팩터링’ 6.1절의 제목은 ‘함수 추출하기’이다. 그가 쓴 글을 보며 ‘목적을 담는 함수’ 만들기의 지침으로 삼으려 스크랩해둔다.