studying, now

[Spring, java] 의존주입

그라파나 2021. 6. 5. 16:12

Dependenct Injection 의존주입

>>> 네가 달라붙어서 의존하고 있으면 떼줄께.

>>> 너에게 책임이 없어 그냥 주입자에게 (외부코드 = 주입자) 모두 맡겨. 

class Programmer {
    private Coffee coffee;

    public Programmer() {
    	this.coffee = new Coffee();
    }
    
    public startProgramming() {
    	this.coffee.drink(); // 일단 마시고 시작하자
    }
}

프로그래머가 프로그래밍을 시작하려면 커피 인스턴스를 마셔야 한다.

이 메서드를 실행시키기 위해서는 커피클래스가 필요하다. (커피를 객체생성해야 한다.)

 

치명적인 단점이 있다. 프로그래머스는 coffe클래스의 내용을 전혀 모른다. 그냥 객체생성만 해서 불러왔을뿐.

drink라는 메서드가 있는지 어쩐지 잘 모른다.

 

programmer  클래스는 coffe클래스에 의존성을 가진다라고 표현.

 

 

기존 의존성을 해제하고 의존을 주입한 경우

class Programmer {
    private Coffee coffee;

    // 그 날 마실 커피를 고를 수 있게된 개발자
    public Programmer(Coffee coffee) {
    	this.coffee = coffee;
    }
    
    public startProgramming() {
    	this.coffee.drink();
        ...
    }
}

프로그래머가 프로그래밍을 시작하려면 커피 인스턴스를 마셔야 한다.

이 메서드를 실행시키기 위해서는 커피클래스가 필요하다. (커피를 파라미터로 받는다.)

programmer  클래스는 coffe클래스받으면 된다.

 

간단하게 객체생성하는 것을 파라미터로 받아버린 것.

이유는 다음과 같다.

 

// Programmer.java
class Programmer {
    private Coffee coffee;

    public Programmer() {
    	this.coffee = new Cappuccino(); // 직접 수정
        // 또는 
        this.coffee = new Americano(); // 직접 수정
    }
    
    ...
}