프로그래밍/JAVA
의존성과 의존성 주입(DI)
Baesj
2021. 7. 20. 19:36
지금까지 공부하면서 이해한 다형성에 대한 설명이다.
추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다.
의존성
어떤 클래스가 다른 클래스의 기능이나 구성요소을 사용하는 것이다. (객체 생성, 메서드 호출 등등)
아래 코드에서는 UserService가 Repository(인터페이스)와 MemoryRepository(클래스)에 의존하고 있다.
interface Repository {
}
class MemoryRepository implements Repository{
}
class UserService {
private final Repository repository = new MemoryRepository();
}
의존성 주입
직접 의존성을 만들지 않고 외부에서 의존성을 가져오는 경우이다.
class UserService {
// private final Repository repository = new UserRepository();
private final Repository repository;
public UserService(Repository repository) {
this.repository = repository;
}
}
의존성 주입을 사용하는 이유
class UserService {
private final Repository repository = new MemoryRepository();
}
위 코드를 보면 DIP(의존 관계 역전 원칙 - 추상화에 의존해야지 구체화에 의존하면 안된다)을 위반한다.
의존성 주입을 사용하게되면
class UserService {
private final Repository repository;
public UserService(Repository repository) {
this.repository = repository;
}
}
위 코드와 같이 인터페이스에만 의존하게 된다.
이외 장점으로는
1. 재사용성이 높아진다
2. 테스트가 용이해진다
3. 객체 간의 의존성을 줄일 수 있다
4. 결합도를 낮추면서 유연성과 확작성을 향상 시킬 수 있다