Americano americano=new Americano();
americano.setPrice(4000);
의존관계 주입에는 생성자 주입, setter주입, field 주입,메서드 주입이 존재합니다.
생성자 주입
위의 사례처럼 객체가 생성될 때, di가 되는 방식을 말합니다.
public CaffeService(Drink drink){
this.drink=drink;
}
Setter 주입
주입된 객체가 후에 변경되는 경우에 사용된다고 보면 됩니다.
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
field 주입
spring의 @Autowired 어노테이션을 이용해서 필드에 직접 주입하는 경우를 말합니다
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
field 주입을 이용하면 Spring이 무조건적으로 관여하여서, Test코드 작성시 유연한 테스트 코드 작성이 어렵습니다.
메서드 주입
메서드 주입은 말 그대로 메서드를 호출하여 주입 하는 것입니다. 실질적으로 setter와 비슷합니다
public void init(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
final
키워드 사용 가능: 생성자 주입으로 의존성을 주입하면 final
로 선언할 수 있어, 컴파일 시 오류를 사전에 방지할 수 있습니다@SpringBootTest
public class RoadmapServiceTest {
@Autowired
private RoadmapService roadmapService;
@BeforeEach
public void setUp() {
roadmapService.updateAllRoadmaps();
}
,,,
*DI(Dependency Injection)는 객체 간의 강한 의존성을 약화시키고 유연성**을 높이기 위해 사용되는 설계 패턴입니다. DI를 통해 객체 간의 결합도를 낮추고, 유지보수성과 확장성을 높일 수 있습니다. 다음 시간에는 IOC 컨테이너,@Autowired등의 spring에서 di가 이용되기 위해서 어떤 도구를 주는지 에 대해서 다루겠습니다.