Skip to content

Latest commit

 

History

History
48 lines (30 loc) · 1.97 KB

README.md

File metadata and controls

48 lines (30 loc) · 1.97 KB

11장 시스템

도시 만들기와 모듈

전체의 모든 디테일을 파악하면서 관리할 수 있는 사람은 없다. 대신 각 모듈 수도, 전원 교통 등으로 관리한다. 소프트웨어도 이와 마찬가지로 관리되어야 한다.

시스템 생성과 관리 분리

  • 소프트웨어 시스템은 생성과 사용을 분리해야 한다.
  • 소프트웨어 시스템은 관심사에 따라 분리되어야 한다.
  • 생성과 사용이 분리되지 않으면 모듈성을 저해하고 코드의 중복을 가져온다.

분리 방법

  • Main 분리
  • 팩토리 기법
  • 의존성 주입

Main 분리

  • 모든 생성 관련 로직을 Main(어플리케이션 진입점)으로 옮긴다.
  • 어플리케이션에서는 사용할 모든 객체들이 Main에서 잘 생성되었다고 가정한다.

팩토리 기법

  • 객체의 생성 시기를 어플리케이션이 직접 결정하려면 팩토리 객체를 이용한다.
  • 어플리케이션에서는 사용할 모든 객체들이 팩토리 객체를 통해 잘 생성되었다고 가정한다.
  • 자세한 구현을 숨기고 싶다면 Abstract 팩토리 패턴을 사용한다.

의존성 주입

  • 필요한 의존성을 외부에서 객체로 전달 받는다.
  • 객체가 작업을 수행하는 데 필요한 의존성을 외부에서 제공받는다.

스케일링

처음부터 거대한 시스템을 목표로 소프트웨어를 설계하고 만들 수 없다. 소프트웨어 시스템은 물리적인 시스템과는 다르게 점진적으로 커질 수 있다.

의사 결정

  • 큰 시스템에서는 한 사람이 모든 결정을 내릴 수 없다.
  • 결정은 최대한 많은 정보가 모일 때 까지 미룬다.
  • 시기가 되면 모듈화된 컴포넌트의 책임자에게 선택을 맡긴다.

표준

  • 훨씬 가볍고 직관적인 디자인이 가능하면 그것을 선택한다.
  • 표준에 심취해 "고객을 위한 가치 창출"이라는 목표를 잃으면 안된다.