1. 시스템 제작과 사용을 분리하라.

<aside> 💡 제작(construction)과 사용(use)는 다르다

</aside>

<aside> 💡 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 '연결'하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다.

</aside>

10장 클래스와 이어지는 비슷한 내용이다. 먼저 아래 코드를 보자.

public Service getService() {
	if(service == null)
		service = new MyServiceImpl(...);
	return service;
}

위 코드는 초기화 지연(Lazy Initialization) 혹은 계산 지연(Lazy Evaluation)이라는 기법이다.

결국, 위와같은 기법은 가볍게 한 번정도 사용할때는 상관없지만 사용빈도가 높아질수록 문제가 많아진다.

그렇기에 시스템의 생성과 사용 로직을 분리해야 한다.

Main 분리

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/67da096b-3a46-4969-b58b-e468a787ebc4/Untitled.png