💡 DI는 객체간의 결합도를 줄여 의존관계를 느슨하게! →유연한 대처가 가능
DI의 방식
필드 주입
의존성을 나타내는 필드에 @Autowired어노테이션을 사용해서 주입
- 코드 작성이 간결
- 오류를 찾기 어렵고 의존성 주입의 순서를 보장하기 어려움
생성자 주입
의존성을 주입하는 생성자를 정의하고, @Autowired 어노테이션을 사용하여 의존성을 주입
- 오류를 찾을 수 있고, 의존성 주입의 순서를 보장
- 생성자를 통한 필수 의존성을 전달하므로, 의존성 누락에 대한 예방 가능
프로퍼티를 통한 의존성 주입
applicationContext.xml에 <property> 태그를 사용하여 의존성을 주입 →객체 생성 시 주입된 객체도 함께 생성됨
인터페이스를 통한 의존성 주입
추상화 개념을 이용한 의존성 주입 방식
의존성을 주입하는 대상 클래스가 인터페이스를 구현하고 있어야 함. 이 때, 구현체 클래스를 직접 주입하는 대신, 해당 인터페이스를 주입함으로써 유연성과 확장성을 높일 수 있다.
**ex>**서비스 클래스가 데이터베이스와 의존성을 가지고 있다고 가정. 서비스 클래스는 데이터베이스와 직접적으로 의존하므로 인터페이스를 이용한 의존성 주입 방식을 적용하면, 서비스 클래스는 인터페이스를 의존하도록 변경할 수 있다. 이렇게 하면, 추후에 데이터베이스를 변경하더라도 서비스 클래스의 코드를 수정하지 않아도 됨. →최종 프로젝트에 적용했던 방식…
예시
필드 주입 & 생성자 주입
//필드 주입
public class PostService {
@Autowired
private PostRepository postRepository;
}
//생성자 주입
public class PostService {
private final PostRepository postRepository;
@Autowired
public PostService (PostRepository postRepository) {
this.postRepository = postRepository;
}
}
'스파르타 기술면접' 카테고리의 다른 글
| List / Set / MAp, HashMap (0) | 2023.04.16 |
|---|---|
| Filter / Interceptor / AOP (0) | 2023.04.11 |
| DI 방식, FIlter / Interceptor / AOP (0) | 2023.03.30 |
| MSA , 제네릭(3일차) (0) | 2023.03.30 |
| DI , DB에서의 인덱스 사용(2일차) (0) | 2023.03.30 |