클린 코드 - 11장 시스템
CleanCode ·클린 코드 11장 시스템을 정리합니다!
깨끗한 시스템을 작성하는 법
- 시스템 제작과 상용을 분리하라
- Main 분리, 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고,
나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정한다. - 팩토리
- 의존성 주입, 새로운 객체는 넘겨받은 책임만 맡음. SRP를 지킴.
- Main 분리, 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고,
- 확장
- 관심사를 적절히 분리해 관리하면 소프트웨어 아키텍처는 점진적으로 확장 가능
- 자바 프록시
- 단순한 상황에 적합, 개별 객체나 클래스에서 메서드 호출을 감싸는 경우가 좋은 예
- 코드 양과 크기는 프록시의 단점, 즉 깨끗한 코드를 작성하기 어려움.
- 시스템 단위로 실행 지점을 명시하는 메커니즘을 제공하지 않음.
- 순수 자바 AOP 프레임워크
- 사실상 스프링과 독립적
- 애노테이션 속에 정보를 담아 코드 자체가 깔끔하고 깨끗
- AspectJ 관점
- 관심사를 관점으로 분리하는 가장 강력한 도구는 AspectJ언어
- 스프링 AOP와 JBoss AOP가 제공하는 순수 자바 방식은 관점이 필요한 상황 중 80-90%에 충분
- AspectJ는 관점을 분리하는 강력하고 풍부한 도구 집합을 제공하긴 하지만,
새 도구를 사용하고 새 언어 문법과 사용법을 익혀야 한다는 단점
- 테스트 주도 시스템 아키텍처 구축
- 코드 수준에서 아키텍처 관심사를 분리할 수 있다면, 진정한 테스트 주도 아키텍처 구축 가능
- 의사 결정을 최적화하라
- 가장 적합한 사람에게 책임을 맡기면 가장 좋음
- 때때로 가능한 마지막 순간까지 결정을 미루는 방법이 최선임
- 최대한 정보를 모아 최선의 결정을 내릴 수 있음
- 명백한 가치가 있을 때 표준을 현명하게 사용하라
- 표준 사용시 장점이 많지만, 표준을 만드는 시간에 많은 시간을 할애해 일을 망칠 수 있음
- 시스템은 도메인 특화 언어가 필요하다
- 도메인 특화 언어(DSL)은 간단한 스크립트 언어나 표준 언어로 구현한 API
- DSL로 짠 코드는 도메인 전문가가 작성한 구조적인 산문처럼 읽힘
- 좋은 DSL은 도메인 개념과 그 개념을 구현한 코드 사이에 존재하는 ‘의사소통 간극’을 줄여줌
- 효과적으로 사용한다면 추상화 수준을 코드 관용구나 디자인 패턴 이상으로 끌어올림
- 적절한 추상화 수준에서 코드의도를 표현할 수 있음