[Clean Architecture 정리] 26장. 메인 컴포넌트
26장. 메인 컴포넌트
모든 시스템에는 메인이라는 컴포넌트가 존재하고, 메인이 나머지 컴포넌트의 생성, 조정, 관리의 역할을 담당한다.
궁극적인 세부사항
메인 컴포넌트는 궁극적인 세부 사항으로 가장 낮은 수준의 정책이다. 메인은 팩토리, 전략, 시스템 전반에 필요한 객체들을 생성하고 더 높은 수준에 정책에 제어권을 넘긴다.
스프링과 같은 의존성 주입 프레임 워크에서 의존성을 주입하는 역할을 메인 컴포넌트에서 이뤄진다.
책에서 나온 예제를 보면 메인 컴포넌트와 메인 함수가 있다.
메인 컴포넌트에서 주목할 점은 시스템에서 사용되는 문자열을 로드해서 나머지 핵심 영역에서 이 문자열을 알지 못하도록 한다.
코드에서 문자열은 쉽게 변경될수도 있고, 개발자의 실수로 인해 오타가 발생할 수도 있다.
진행하고 있는 과제에서도 코드 내의 문자열은 다른 API에서 작성하고 변수로 받아와 처리한다.
고수준 정책에서 문자열과 같이 쉽게 변경될 수 있는 부분을 알지 못하도록 막는 것은 중요한 일이라고 생각된다.
메인 함수에서 주목할 점은 팩토리 클래스를 사용해 시스템에 필요한 컴포넌트를 생성한다.
이 때, 팩토리 클래스의 생성 함수에 클래스 이름을 전달하는데, 클래스를 직접 생성해서 전달하는 것을 막고 클래스의 변경이 생기더라도 메인 함수의 재컴파일과 재배포가 필요하지 않기 때문이다.
또한 입출력 처리 클래스, 시스템이 계속 진행되기 위한 메인 루프, 간단한 명령어 해석 등을 메인 함수에서 처리하고, 실제 구체적인 기능은 고수준 컴포넌트에 위임하고 있다.
예제에서 말하는 요지는 메인은 클린 아키텍처에서 가장 지저분한 저수준 모듈이라는 것이다.
메인은 고수준 시스템을 위한 모든 것을 로드한 후, 제어권을 고수준에 넘기는 역할을 한다.
결론
메인은 초기 조건과 설정을 구성하고 외부 자원을 수집한 후, 제어권을 고수준 정책으로 넘긴다.
메인은 플러그인 개념과 같기 때문에 개발/운영/테스트 등과 같이 필요한 설정과 형식에 맞게 컴포넌트를 만들 수도 있다.