관심사의 분리

MemberService에서 MemberRepository를 주입받고 내부에서 MemberRepository의 구현체인 MemoryMemberRepository로 객체를 초기화하게 되면 MemoryMemberRepository에 의존성이 생긴다.

MemberService에서 MemberRepository 인터페이스만 의존하게 하고, MemberService의 생성자만 만들어준다.

MemberService는 생성자를 통해 구현 객체를 주입받고 어떤 객체가 주입될 지는 외부(AppConfig)에서 결정된다. 의존 관계에 대한 고민은 외부에 맡기고 실행에만 집중한다.

AppConfig가 구체 클래스를 선택하는 역할을 가지고 나머지는 담당하는 기능을 실행하는데에만 집중할 수 있게 된다.

좋은 객체 지향 설계의 5가지 원칙의 적용

IoC, DI, 그리고 컨테이너

스프링으로 전환하기

public static void main(String[] args) {
	ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
	MemberService memberService = ac.getBean("memberService", MemberService.class);

	memberService.
}