11장 : 시스템

Y·2023년 9월 13일
0

클린 코드

목록 보기
11/14

*<클린 코드>를 참고하여 작성한 글입니다.

시스템

  • 시스템 제작과 시스템 사용을 분리하라
    • 관심사 분리
    • 체계적이고 탄탄한 시스템 -> 모듈성을 깨서는 안 된다. 설정 논리는 일반 실행 논리와 분리해야 모듈성이 높아진다. 주요 의존성을 해소하기 위한 방식, 즉 전반적이며 일관적인 방식도 필요하다.
    • Main 분리
    • 팩토리
    • 의존성 주입
      • 대다수 DI 컨테이너는 필요할 떄까지는 객체를 생성하지 않고, 대부분은 계산 지연이나 비슷한 최적화에 쓸 수 있도록 팩토리를 호출하거나 프록시를 생성하는 방법을 제공. -> 계산 지연 기법이나 이와 유사한 최적화 기법에서 이런 메커니즘을 사용할 수 있음.
  • 확장
    • 처음부터 올바르게 시스템을 만들 수 있다는 믿음은 미신이다 .대신에 우리는 오늘 주어진 사용자 스토리에 맞춰 시스템을 구현해야 한다. 내일은 새로운 스토리에 맞춰 시스템을 조정하고 확장하면 된다. 이것이 반복적이고 점진적인 애자일 방식의 확장이다. TDD, 리팩터링으로 만들어지는 꺠끗한 코드는 코드 수준에서 시스템을 조정하고 확장하기 쉽게 만든다.
    • 소프트웨어 시스템은 물리적 시스템과 달리, 관심사를 적절히 분리해 관리한다면 점진적으로 발전할 수 있다.
    • AOP : 특정 관심사를 지원하려면 시스템에서 특정 지점들이 동작하는 방식을 일관성 있게 빠궈야 한다.
  • 테스트 주도 시스템 아키텍처 구축
    • 코드 수준에서 아키텍처 관심사를 분리할 수 있다면, 진정한 테스트 주도 아키텍처 구축이 가능해진다.
    • 아주 단순하면서도 멋지게 분리된 아키텍처로 소프트웨어 프로젝트를 진행해 결과물을 재빨리 출시한 후, 기반 구조를 추가하며 조금씩 확장해나가도 괜찮다. 설계가 최대한 분리 -> 각 추상화 수준과 범위에서 코드가 적당히 단순 => 아주 높은 가용성과 성능을 효율적이고 유연하게 달성 가능.
  • 의사 결정을 최적화 하라
  • 명백한 가치가 있을 떄 표준을 현명하게 사용하라
  • 시스템은 도메인 특화 언어가 필요하다
profile
개발자, 학생

0개의 댓글