본문 바로가기

클린 아키텍처

5장 아키텍처 - 정책과 수준

정책

소프트웨어 시스템이란?

소프트웨어 시스템은 정책을 기술한것이다. 컴퓨터 프로그램은 각각의 정책을 상세하게 기술한 설명서이다.

시스템에서 하나의 정책은 이 정책을 서술하는 여러개의 작은 정책으로 쪼갤 수 있다.

 

아키텍처와 정책?

아키텍처는 이러한 여러정책들을 분리하고 재배치하는 일이다. 동일한 시점에 변경되는 정책은 동일한 수준에 위치하며,동일한 컴포넌트에 포함되어야하고 서로다른 이유,시점에 변경되는 정책은 다른 수준에 위치해야하며 다른 컴포넌트에 위치시켜 분리해야한다.

 

수준

수준이란?

수준은 정의하자면 입출력과의 거리이다. 입출력으로부터 멀어질 수록 수준은 높아진다. 

 

위 그림에서 번역 컴포넌트는 가장 고수준의 컴포넌트에 속한다. 입력과 출력을 다루는 정책인 입력,출력은 가장낮은 수준의 컴포넌트이다.

 위 그림에서 실선은 런타임의 의존성 흐름을 의미한다. 점선은 컴파일 타임의 의존성을 의미한다. 런타임과 컴파일타임의 의존성이 같은 방향이 아님을 자세히 볼필요가있다.

저수준의 컴포넌트가 고수준의 컴포넌트를 의존하므로 번역이라는 컴포넌트는 입력과 출력의 변경에 의해 보호될 수 있다. 

 

 

위 그림 1의 클래스 다이어그램이다. 외각의 원은 컴포넌트를 의미한다.

위그림은 SRP, CCP, OCP, DIP, SAP, SDP를 준수한다.

SRP : 각각의 클래스는 하나의 변경사항을 가지고 있다.

OCP : Encrypt는 Input과 Output이라는 인터페이스를 의존함으로써 확장을 편리하게 할 수 있다. 또한 인터페이스로 인해 Concrete한 클래스(Console Reader,Console Writer)의 변경으로 인한 Encrypt의 변경은은 닫혀있다.

CCP : 각각의 컴포넌트들은 하나의 변경사항을 가지고 있다. Input은 입력에의한 변경만을 책임지며 Output은 출력에 관한 것만 책임지며 번역은 번역에 관한 것만은 책임진다. 또한 번역컴포넌트는 각각의 컴포넌트의 변경의 영향을 받지않는다.

SDP : 각각의 안정성은 더 낮은 쪽의 컴포넌트로 향하게 된다. 입력(I=1),출력(I=1),번역(I=0)

SAP : 번역컴포넌트는 I=0이며 A=0.6 정도로 주계열에 속한정도이며 SDP의 안정성때문에 변경에영향을 받지 않는다.