1. 코드가 복잡해지는 이유
- 세상은 복잡하고, 그 복잡한 세상이 가진 문제들의 복잡도가 코드에 반영된다. (= 요구 사항이 복잡할 때 코드가 복잡해지는 건 단순히 능력 부족에서 기인한 것이 아니라 원래 그렇게 될 수 밖에 없는 것이다)
- 이러한 복잡함을 다루기 위해서는 요구 사항에 대한 정보와 이를 처리할 시간과, 능력이 있어야 하는데 현실적인 상황들에서는 대체로 모두 부족하다.
- 이미 복잡해진 코드를 수정하는 일의 비용(시장 기회, 개발자의 인건비 등)은 기하급수적으로 증가하고, 방치할 수록 많은 이자를 지불해야 하기 때문에 틈틈이 **“일을 줄이는 일”**을 해야 한다.
- 이 “일을 줄이는 일”이란,
1) 빠르게 코드를 이해할 수 있는 코드 구조를 만들고,
2) 하나의 수정 사항으로 인하여 다른 코드에 미치는 영향을 줄이는 것이다.
- 수정 사항을 줄이려면 수정의 이유와 시점이 서로 다른 코드들을 분리 / 격리하여 작성해야 한다. 그리고 이러한 목적을 달성하기 위한 여러가지 기법들을 활용할 준비가 되어 있어야 한다.
2. 우리의 일을 최대한 줄이자
하지만 위의 문제들은 너무 어렵고 거대한 주제이다. 우리가 해볼 수 있는 것들은
- 1) 데이터 / 계산 / 액션이 구분되어 보이나요?
- 2) 비즈니스 로직이 구분되어 보이나요?
- 3) 부적절하게 조립된 컴포넌트가 보이나요?
와 같은 질문들을 통해 최대한 일을 줄여야 한다.
우리는 코드를 ‘추상화’ 하고 ‘리팩토링’을 하고 싶다는 욕구를 느끼게 될 것 이다. 하지만 슬프게도 대체로 그런 시간들이 넉넉히 주어지지는 않고, 막상 시간을 넉넉히 주더라도 만족할만한 결과를 내지 못할 가능성도 꽤 크다.