작은 객체를 조합해 동작을 교체하기 쉽게 만듭니다.
구성은 객체가 필요한 다른 객체를 속성으로 보관하는 has-a 관계입니다. 의존성을 생성자에서 받으면 실제 구현 대신 테스트용 구현을 전달할 수 있어 결합도가 낮아집니다.
예제에서 class Service: def __init__(self, repository): self.repository = repository 부분부터 찾으세요. 값을 만드는 표현식과 그 값을 다음 문장으로 넘기는 흐름을 한 줄씩 따라가면 실행 결과를 스스로 설명할 수 있습니다.
서비스가 내부에서 구체적인 저장소를 직접 만들지 않으면 파일, 메모리, 데이터베이스 구현을 호출 코드에서 선택할 수 있습니다.
의존성의 전체 클래스보다 실제로 필요한 작은 메서드 계약에 맞춰 설계하면 대체 구현이 단순해집니다.
이 코드는 브라우저의 실제 Python에서 실행됩니다. 먼저 현재 결과를 확인한 뒤 MemoryRepository에 find_by_title을 추가하고 서비스에서 사용하세요.
전역 데이터베이스나 숨은 싱글톤을 함수 안에서 직접 읽으면 테스트 순서와 환경에 영향을 받기 쉽습니다.
직접 바꿔보세요MemoryRepository에 find_by_title을 추가하고 서비스에서 사용하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.