스프링

의존관계 주입(DI)을 통해 DIP, OCP 문제를 해결하자

발전생 2022. 2. 3. 00:01

이 글은 김영한 강사님의 강의와 자료를 학습한 뒤 정리하는 글입니다


생성자 주입으로 어떻게 DIP를 지키는지 보자.

public class AppConfig {
 public MemberService memberService() {
  return new MemberServiceImpl(new MemoryMemberRepository());
 }
 public OrderService orderService() {
  return new OrderServiceImpl(
  new MemoryMemberRepository(),
  new FixDiscountPolicy());
 }
}

생성자를 통해 외부(AppConfig)에서 구현 객체를 생성하고 연결해준다.

 

MemberServiceImpl의 코드를 보면 인터페이스인 memberRepository에 생성자를 통해 들어온 구현체의 레퍼런스를 연결해주는 것을 볼 수 있다.

public class MemberServiceImpl implements MemberService {
 private final MemberRepository memberRepository;
 public MemberServiceImpl(MemberRepository memberRepository) {
  this.memberRepository = memberRepository;
 }
 public void join(Member member) {
  memberRepository.save(member);
 }
 public Member findMember(Long memberId) {
  return memberRepository.findById(memberId);
 }
}

덕분에 이제 MemberServiceImpl은 구현체에 의존하지 않고 추상체(인터페이스)에만 의존하게 됐다.

이처럼 외부에서 의존관계를 주입하는 것을 의존관계 주입(DI)라고 한다.

 

구현체를 변경할 일이 있으면 AppCofnig에서만 변경해주면 된다. 구현체를 사용하는 쪽에서는 코드 변경이 필요가 없어서 유지보수가 편해진다.

'스프링' 카테고리의 다른 글

SOLID 설계 원칙  (0) 2022.01.25
객체 지향이란  (0) 2022.01.25
스프링 부트를 사용하는 이유  (0) 2022.01.25
스프링의 역사  (0) 2022.01.25