프로그래밍/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. 결합도를 낮추면서 유연성과 확작성을 향상 시킬 수 있다

'프로그래밍 > 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