제어 역전 (IoC)
제어 역전(IoC: Inversion of Control)이란 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임하는 것을 뜻한다.
의존성 주입(DI)
의존성 주입(DI: Dependency Injection)이란 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 뜻한다.
IoC Container / DI Container
IoC / DI을 사용했을 때, 객체의 생명주기를 관리하는 '외부'를 IoC Container 또는 DI Container이라고 한다.
Spring Container, Assembler, Object Factory 등으로 불리기도 한다.
예시
IoC / DI 방식을 사용하지 않은 경우
// MemberServiceImpl.java
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
}
- MemberServiceImpl가 MemoryMemberRepository를 의존하고 있다.
- 만약 MemoryMemberRepository가 아니라 다른 MemberRepository로 바뀐다면, MemberServiceImpl를 수정해야한다.
IoC / DI 방식을 사용한 경우
// AppConfig.java
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
// MemberServiceImpl.java
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
- 위 방식은 생성자를 통한 의존성 주입이다.
- MemberServiceImpl가 MemoryMemberRepository를 의존하고 있지 않다.
- 만약 MemoryMemberRepository가 아니라 다른 MemberRepository로 바뀐다면, AppConfig에서 수정하면 된다.
- 이때, AppConfig는 IoC Container 또는 DI Container라 불린다.
출처: 김영한, 「스프링 핵심 원리 - 기본편」, 인프런
출처: 장정우, 「스프링 부트 핵심 가이드」, 위키북스
'Basic > Design Pattern' 카테고리의 다른 글
SOLID 원칙 (0) | 2024.01.25 |
---|