의존성 주입(Dependency Injection) 이란?
클래스 간의 사이에 인터페이스를 통해 의존 관계가 고정되지 않게 느슨한 결합 관례를 유지해서 유연한 동작이 가능하도록 하는 개념이다,만약에 강한 결합도를 가지게 된다면 코드를 유지보수하기 위해서 변경해야 하는 것들이 많아질 것이다.
DI에 대해서 정리하자면.
- 제어의 역전(IoC)의 개념을 구체화시킨 것이 스프링의 DI다.
- 깔끔한 코드 작성이 가능해진다.
- 객체들 간의 결합도가 낮춰진다.
- 객체들 간의 느슨한 결합을 통해서 요구 사항의 변경에 있어서 유연하게 수정할 수 있게 된다.
- 테스트 작성에 있어서 보다 용이해진다.
예제 코드를 통해 의존성 주입을 간편하게 확인할 수 있다.
@Component
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
해당 코드는 "MemberServiceImpl" 클래스와 "MemberRepository" 인터페이스의 연결을 보여주고 있다.
의존성 주입 방식 중 하나인 생성자 주입 방식으로 의존 관계를 주입하고 있다.
만약에 비즈니스적 문제로 인하여 "memberRepository.save" 메서드를 변경하는 상황이 발생하게 된다고 해도
해당 코드를 건드는 게 아닌 "MemberRepository" 인터페이스의 구현 클래스인 "MemberRepositoryImpl"만 수정하면 된다.
이처럼 의존성 주입에 대해서 블로그 포스팅을 해봤다.
계속 개념을 이해해 가면서 살을 덧붙일 예정이다.
참고 문서
https://mangkyu.tistory.com/150
[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유
1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Depen..
mangkyu.tistory.com
Core Technologies
In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do
docs.spring.io