// MemberServiceImpl.java
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
}
이와같이 구현체에서 직접 객체를 생성시 추후 MemberRepository의 구현 방식이 변경되면 클라이언트 단의 소스변경이 불가피하다.
따라서 아래와 같이 변경한다.
// MemberServiceImpl.java
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
// AppConfig.java
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository());
}
}
생성자를 통해 구현체를 주입하는 방식으로 변경 후,
설정파일을 만들어 설정파일에서 구현체를 주입하도록 한다.
이와 같은 방식을 통해 DIP원칙을 지키게 되고 추후 구현체변경시 설정파일에서만 변경해주면 된다.