스프링 IoC, DI

Miz·2021년 5월 8일
0

관심사의 분리

모든 내용은 김영한님의 강의를 보고 정리한 내용입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

  1. 구현체를 선택하는 방법

    • 구현체는 자신의 역할(인터페이스)를 수행하는 것에만 집중해야 한다.
    • 인터페이스의 구현체를 선택하는 책임을 담당하는 별도의 설정 객체가 필요하다.
    • 생성자 주입을 사용하자
    • 애플리케이션의 실제 동작에 필요한 구현객체 생성을 한다.
    • 생성한 객체 인스턴스의 레퍼런스를 생성자를 통해 주입한다.
    • 결국 구현된 클래스는 인터페이스에만 의존한다
    • 구현된 클래스는 인터페이스에 어떤 구현객체가 올지 모른다.
    • 의존관계에 대한 고민을 하지 않고 자기의 역할만 집중한다.
  2. MemberService / MemberServiceImpl / MemberRepository / JdbcMemberRepository


public interface MemberService {

    void save(Member member);
}

public class MemberServiceImpl implements MemberService {

    private final MemberRepository memberRepository;

    public MemberServiceImpl(MemeberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Override
    public void save(Member member) {
        memberRepository.save(member);
    }
}

  • 구현체인 MemberServiceImpl에서 MemberRepository의 구현 객체를 직접 설정하지 않는다.
  • MemberRepository에 들어올 객체는 오직 외부(AppConfig)에서만 생성자를 통해 주입한다.
profile
2년차 백엔드 개발자

0개의 댓글