반응형

 

"김영한 스프링 핵심 원리 기본편" 내용을 기반으로 작성한 내용입니다.

 

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보

www.inflearn.com

 

📝스프링의 핵심 기능 사용하기 전

MemberServiceImpl

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

 

 

MemberService

public interface MemberService {
  void join(Member member);
  Member findMember(Long memberId);
}

위 코드는 회원가입하고 회원을 찾는 로직들이 들어간 코드들이다. MemberServiceImple에서 new MemoryMemberRepository()를 통해 Repository를 어떤 걸 쓸지 직접 정해주고 있어서 OCP/DIP를 위반하고 있다.

 

 

📝스프링의 핵심 기능 사용하기 후

AppConfig

public class AppConfig {
  public MemberService memberService() {
    return new MemberServiceImpl(new MemoryMemberRepository());
  }
}

 

 

MembmerServiceImpl

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);
  }
}

 

MembmerService

public interface MemberService {
  void join(Member member);
  Member findMember(Long memberId);
}

AppConfig에서 New해서 관리하기 때문에 더이상 MemberServiceImpl에서 MemberRepository를 New로 넣을 필요 없고 코드 수정도 필요가없다. 이렇게 함으로 OCP/DIP를 MemberServiceImpl은 지킬 수 있고 그 책임을 AppConfig에서 하게 된다.

 

 

📝IoC / DI 컨테이너

프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라고 한다. 위에 코드로 이야기하자면 AppConfig에서 모두 관리하기 때문에 이걸 IoC 컨테이너 또는 DI(의존 주입) 컨테이너라고 한다.

 

위 예시로 설명하면 MemberService에 대한 Repository 제어를 MemberService에서 하는 게 아니라 AppConfig에서 하기 때문에 제어가 역전되었다라고 이야기하고 DI 즉, 의존을 주입하는 역할을 해서 DI 컨테이너라고 불리는 것이다.

 

 

반응형