728x90

11장. 시스템

본 장은 필자가 이해에 있어 가장 어려움을 겪고있는 장이다. 핵심이 빠질수 있으며, 요약내용의 전달력이 떨어질 수 있으니 양해바랍니다.


 - 시스템을 제작하는 것과 사용하는 것은 아주 다르다. 이 의미를 여러번 곱씹어 생각해보길 바란다.


 - 시스템을 생성과 사용을 분리하는 한가지 방법으로는, 생성과 관련한 코드는 main(프로그램 실행시 돌아가는)이나 main이 호출하는 모듈로 옮기고, 나머지 시스템은 모든 객체가 모든 의존성이 연결시킨다. 그리고 애플리케이션은 그저 객체를 사용하면 될 뿐이다. 애플리케이션은 main이나 객체가 생성되는 과정을 전혀 모른다.


 - TDD와 리팩토링으로 얻어지는 깨끗한 코드는 코드 수준에서 시스템을 조정하고 확장하기 쉽게 만든다.하지만 시스템 아키텍처는 사전 계획이 필요하다. 단순한 아키텍처를 복잡한 아키텍처로 조금씩 키우는건 불가능한 것이 현실이다.


 - 코드 수준에서 아키텍처 관심사를 분리할 수 있다면, 진정한 TDD아키텍처 구축이 가능해진다. 그때그때 새로운 기술을 채택해 단순한 아키텍처를 복잡한 아키텍처로 키워갈 수 있다. BUDF(구현 전 모든 사항을 설계하는 기법)를 추구할 필요가 없다.


 - 아주 단순하면서도 멋지게 분리된 아키텍처로 소프트웨어 프로젝트를 진행해 결과물을 재빨리 출시한 후, 기반 구조를 추가하며 조금씩 확장해 나가도 괜찮다.


 - 반드시 그런것은 아니나 결정을 마지막 순간까지 미루는 방법은 최선이다. 게으르거나 무책임해서가 아니라, 최대한의 정보를 모아 최선의 결정을 내리기 위함이다. 성급한 결정은 불충분한 지식으로 내린 결정이다. 너무 일찍 결정하면 고객 피드백을 더 모으고, 프로젝트를 더 고민하고, 구현방안을 더 탐험할 기회가 사라진다.



[출처] 클린코드 - 로버트C.마틴 지음

728x90
반응형