본문 바로가기
공부이야기/Spring

[Spring] Dependency Injection(DI) - 의존성 주입

by coderoom 2021. 5. 2.

 

의존성이란?

 

아래 코드 상를 보면 Room 클래스에서 turnOnLigh()가 호출되기 위해서는 Light 클래스가 필요하다.

이 때, Room 클래스는 Light 클래스에 의존성을 가진다 라고 한다.

class Room {
	private Light light;
    
    public Room() {
    	this.light = new Light();
    }
    
    public turnOnLignt() {
    	this.light.turnOn();
    }
}

 

위와 같이 설계하였을 경우, Light 클래스가 수정되었을 때 Room 클래스도 함께 수정해 줘야 하는 문제가 발생한다.

그럼 어떻게 변경해야 하는 것일까?

 

 

 

 

의존성 주입(DI)이란?

 

의존성 주입이란 필요한 객체를 직접 생성하는 것이 아니라 외부로부터 필요한 객체를 받아서 사용하는 것.

 

의존성을 주입하면 위의 코드를 아래와 같이 변경할 수 있다.

위의 코드에서는 Light를 직접 생성한 반면, 아래 코드에서는 외부로부터 객체를 받아서 대입해 준 것을 볼 수 있다.

class Room {
	private Light light;
    
    public Room(Light light) {
    	this.light = light;
    }
    
    public turnOnLignt() {
    	this.light.turnOn();
    }
}

 

이를 통해 얻을 수 있는 장점은 무엇일까?

 

 

 

 

DI의 이점

  1. Unit Test가 용이해 진다.
  2. 코드의 재활용성을 높여준다.
  3. 객체 간의 의존성(종속성)을 줄이거나 없앨 수 있다.
  4. 객체 간의 결합도를 낮추면서 유연한 코드를 작성할 수 있다.

 

 

 

DI의 유형

  • Setter Injection: 의존성을 입력 받는 setter 메소드를 만들어 이를 통해 의존성 주입
  • Constructor Injection: 필요한 의존성을 포함하는 클래스의 생성자를 만들어 이를 통해 의존성 주입
  • Method Injection: 의존성을 입력 받는 일반 메소드를 만들어 이를 통해 의존성 주입

 

 

 

 

 

 

 

참고 링크

 

 

 

 


 

 

 

댓글