System.out.println("이 게시물은 김영한님의 스프링 핵심 원리-기본편을 참조하였습니다.");
Dependancy Injection(의존성 주입)
: 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉.
클라이언트가 어떤 서비스를 사용할지 지정해주기 보다 무슨 서비스를 사용할 것인지 말해주기.
- 의도
객체의 생성과 사용의 관심을 분리
- 키워드
@Autowired
- 사용성
레고블럭처럼 모듈들을 변경하며 사용할 수 있다.
- 장점
- 유연한 구성 가능성, 재사용성, 테스트가능성, 유가능성
- 종류
- 생성자 주입, 수정자 주입, 필드 주입, 일반 메서드 주입
생성자 주입
- 사용방법
생성자에 @Autowired 붙여줌
- 사용성
- 생성자 호출 시점에 오직 1번만 수행됨.
- 불변의 의존관계의 경우 추천됨.
- 대부분의 경우 추천됨.
// @Autowired 생성자 하나뿐이면 @Autowired 생략 가능
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
수정자 주입
- 사용방법
setter에 @Autowired 붙여줌
- 사용성
- 변경 가능성이 있는 의존 관계에 사용됨
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
필드 주입
- 사용성
- 코드가 간결하지만, 테스트가 힘들다.
- 테스트 코드용으로 간결하게 작성할때만 사용하길 추천.
@Autowired private MemberRepository memberRepository;
@Autowired private DiscountPolicy discountPolicy;
출처
https://www.inflearn.com/course/lecture?courseSlug=%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&unitId=55337&tab=curriculum
출처
의존성 주입 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
의존성 주입 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할
ko.wikipedia.org