Search
Duplicate
🖇️

19. 정책과 수준

소프트웨어 시스템이란 정책을 기술한 것이다.컴퓨터 프로그램이란 각 입력을 출력으로 변환하는 정책을 상세하게 기술한 설명서다.
소프트웨어 아키텍처를 개발하는 기술에는 정책을 신중하게 분리하고, 정책이 변경되는 양상에 다라 ㅈ어책을 재편성하는 일도 포함된다.
동일한 이유로 동일한 시점에 변경되는 정책은 동일한 수준에 위치하며, 동일한 컴포넌트에 속해야 한다.
서로 다른 이유로, 혹은 다른 시점에 변경되는 정책은 다른 수준에 위치하며, 반드시 다른 컴포넌트로 분리해야 한다.
좋은 아키텍처라면 각 컴포넌트를 연결할 때 의존성의 방향이 컴포넌트의 수준을 기반으로 연결되도록 만들어야 한다.
즉, 저수준 컴포넌트가 고수준 컴포넌트에 의존하도록 설계되어야 한다.

수준

수준을 엄밀하게 정의하자면 입력과 출력까지의 거리다.
시스템의 입출력과 멀리 위치할수록 정책의 수준은 높아진다.
입출력을 다루는 정책이라면 시스템의 최하위 수준에 위치한다.
데이터 흐름과 소스 코드의 의존성은 향상 같은 방향을 가리키지 않는다.
의존성은 그 수준에 따라 결합되어야 하며, 데이터 흐름을 기준으로 결합되어서는 안된다.
정책을 컴포넌트로 묶는 기준은 정책이 변경되는 방식에 달려있다.
단일 책임 원칙과 공통 폐쇄 원칙에 따르면 동일한 이유로 동일한 시점에 변경되는 정책은 함께 묶인다.
고수준 정책, 즉 입출력에서 부터 멀리 떨어진 정책은 저수준 정책에 비해 덜 빈번하게 변경되고, 보다 중요한 이유로 변경되는 경향이 있다.
저수준 정책, 즉 입출력과 가까이 위치한 정책은 더 빈번하게 변경되며, 보다 긴급성을 요하며, 덜 중요한 이유로 변경되는 경향이 있다.
모든 소스코드 의존성의 방향이 고수준 정책을 향할 수 있도록 정책을 분리했다면 변경의 영향도를 줄일 수 있다.
시스템의 최저 수준에서 중요하지 않지만 긴급한 변경이 발생하더라도, 보다 높은 위치의 중요한 수준에 미치는 영향은 거의 없게 된다.
SOLID 원칙들과 다를게 뭘까? 결국 추상화된 하나의 개념들은 동일하다는 말을 하고 싶은 걸까?