[Spring] DI 의존성 주입 (Dependency Injection)

null·2023년 6월 26일
0

Spring

목록 보기
6/7

의존성 주입 (Dependency injection)

  • 필드 주입, setter 주입, 생성자 주입 3가지
    : 의존관계가 실행중에 동적으로 변하는 겨우는 거의 없으므로 생성자 주입을 권장
// 생성자 주입
public MemberService(MemberRepository memberRepository) {
	this.memberRepository = memberRepository;
	}

@Controller
public class MemberController {

	private MemberService memberService;

	// setter 주입
	@Autowired
	public void setMemberService(MemberService memberService) {
		this.memberService = memberService;
	}
	
}
  • public void setMemberService() : public으로 열려있어야하기때문에 문제가 생길 수 있다

@Controller
public class MemberController {
	
    // 필드 주입
	@Autowired private final MemberService memberService;
    
}

  • appConfig 객체는 memoryMemberRepository 객체를 생성하고
    그 참조값을 memberServiceImpl을 생성하면서 생성자로 전달

  • 클라이언트인 memberServiceImpl 입장에서 보면 의존관계를 마치
    외부에서 주입해주는 것 같다고 해서 DI(Dependency Injection) 우리말로 의존관계 주입 또는 의존성 주입이라 한다

public class AppConfig {

	// 이전에는 MemberServiceImpl가 private final MemberRepository memberRepository = new MemoryMemberRepository(); 와 같이
	// 직접  new MemoryMemberRepository()를 할당 했었다 
	public MemberService memberService() {
		return new MemberServiceImpl(new MemoryMemberRepository()); // 성성자 주입
	}
	
	public OrderService orderService() {
		return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
	}
}

[출처]스프링 핵심원리 이해2-객체지향원리적용 - 인프런 김영한

0개의 댓글