[Programming] - CleanCode 11. 시스템


“복잡성은 죽음이다. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다.”

  • 레이 오지, MS CTO

인상 깊었던 내용만 아래 정리해보았다.

시스템 제작과 시스템 사용을 분리하라


쉽게 말해서 설정하는 부분과 사용하는 부분을 나누라는 것인데

핵심 키워드는 의존성 주입 DI 와 관심사 분리 SoC이다.

설정 논리를 main 쪽 혹은 main에서 불러오는 다른 모듈에서 설정하도록 몰아 놓거나

추상 팩토리 패턴을 활용하여 생성하는 코드를 숨겨놓는다.

가장 강력한 매커니즘이 의존성 주입 DI이다.

의존성 주입


의존성 주입은, 제어 역전 IoC 기법을 의존성 관리에 적용한 매커니즘이다.

초기 설정은 시스템 전체에 필요하므로 ‘main’ 루틴 혹은 특수 컨테이너를 활용한다.

확장


조그만 마을이 커져서 6차선 도로를 만드는 일은 고통이 따른다.

그렇다고 조그만 마을을 만드는데 어떻게 될지도 모르는 곳에서 6차선 도로를 만드는 것도 문제이다!

‘처음부터 올바르게’ 시스템을 만들 수 있다는 사실은 미신이다.

관심사를 적절히 분리해서 개발한다면 점진적으로 발전할 수 있다.

테스트 주도 시스템 아키텍쳐 구축


코드 수준에서 아키텍쳐 관심사를 분리할 수 있따면, 진정한 테스트 주도 아키텍쳐 구축이 가능해진다.

의사 결정을 최적화 하라


모듈을 나누고 관심사를 분리하면 파트별 관리와 결정이 가능해진다.

해당 파트에 가장 적합한 사람에게 책임을 맡기면 좋다.

관심사를 모듈로 분리한 POJO 시스템은 기민함을 제공한다.

결론


시스템 역시 깨끗해야 한다.

모든 추상화 단계에서 의도는 명확히 표현해야 한다.

시스템을 설계하든 개별 모듈을 설계하든, 실제로 돌아가는 가장 단순한 수단을 사용해야 한다는 사실을 명심하자.

내 생각


일단 이번 파트는 클린 아키텍쳐까지 이어서 읽어야 많은 부분이 정리될것 같았다.

관심사 분리 (레이어 쪼개기), 의존성 주입 (현재 Flutter에서는 getX의 Bindings를 사용하고 있다) 등은 이미 프로젝트에서 사용중이라 이것이 없이 개발했던 모습을 몰라서 얼만큼 중요한지는 사실 크게 와닿지는 않았다.

그만큼 선배 개발자들이 많은 고민과 고생 끝에 나온 결과물들을 누리고 있는 만큼

나도 계속 개발을 하며 단순히 현재 구조에 만족하기 보다 더 나은 구조와 방향을 고민해야겠다.