험블 객체 패턴은 디자인 패턴으로, 테스트하기 어려운 행위와 테스트하기 쉬운 행위를 단위 테스트 작성자가 분리하기 쉽게 하는 방법으로 고안되었다.
테스트하기 어려운 행위를 험블 객체로 옮긴다.
험블 객체 패턴을 사용하여 두 부류의 행위를 분리하여 프레젠터와 뷰라는 서로 다른 클래스로 만든다.
프레젠터 는 테스트하기 쉬운 객체로, 애플리케이션으로부터 데이터를 받아 화면에 표현할 수 있는 포맷으로 만든다.
뷰 는 험블 객체이고 테스트하기 어렵다. 데이터를 화면으로 전달하는 간단한 일만 처리한다.
화면에 표시되고 애플리케이션에서 어느 정도 제어할 수 있는 요소라면 무조건 뷰 모델 내부에 문자열, bool, enum 형태로 표현한다.
애플리케이션은 프레젠터 에 Date 객체를 전달한다.
프레젠터 는 해당 데이터를 적절한 포맷의 문자열로 만들고, 이 문자열을 뷰 모델 이라고 부르는 간단한 데이터 구조에 담는다.
뷰 는 뷰 모델에서 이 데이터를 찾는다.
유스케이스 인터랙터와 데이터베이스 사이에는 데이터베이스 게이트웨이 가 위치한다. 이 게이트웨이는 데이터베이스에 수행하는 모든 메서드를 포함한다.
유스케이스 계층은 SQL을 허용하지 않는다. 필요한 메서드를 제공하는 게이트웨이 인터페이스를 호출한다. 그리고 인터페이스의 구현체는 데이터베이스 계층에 위치하고, 이 구현체는 험블객체이다.
아키텍처 경계에서 험블 객체 패턴을 사용하면 전체 시스템의 용이성을 크게 높일 수 있다.
Clean Architecture - Robert C. Martin