지금까지 공부하면서 이해한 다형성에 대한 설명이다.
추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다.
의존성
어떤 클래스가 다른 클래스의 기능이나 구성요소을 사용하는 것이다. (객체 생성, 메서드 호출 등등)
아래 코드에서는 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. 결합도를 낮추면서 유연성과 확작성을 향상 시킬 수 있다
'프로그래밍 > JAVA' 카테고리의 다른 글
자바 random 함수와 round 함수 이해 (0) | 2021.07.27 |
---|---|
Date와 Time (0) | 2021.07.25 |
1차 배열 2차 배열 sort(오름차순, 내림차순) (0) | 2021.07.18 |
Enum(열거형) (0) | 2021.07.17 |
추상화 이해 (0) | 2021.07.15 |