1.2 단순한 객체지향 시스템 디자인
“복잡성을 줄이거나 그대로 유지하기 위한 작업을 수행하지 않으면 소프트웨어 시스템은 시간이 지남에 따라 복잡성이 증가한다.”
이 통찰은 매니 레만(Manny Lehman)의 1984년 논문, <대규모 프로그램의 생명 주기에서 법칙, 진화, 보존에 대해 이해하기1>에서 비롯됐다. 어떤 유형이든 소프트웨어 시스템을 진화시키는 것은 간단하지 않다. 코드는 시간이 지남에 따라 품질이 저하되는 경향이 있으며, 품질을 유지하기 위해서는 노력이 필요하다. 지난 40여 년간의 발전에도 불구하고 소프트웨어 시스템의 유지보수성(maintainability)은 여전히 어려운 과제로 남아 있다.