본문 바로가기

기술/Spring

[Spring study] DI란 무엇인가

2. 스프링 DI

스프링은 DI를 효율적으로 사용하게 한다. 다른 언어에서도 DI는 사용한다. 알게모르게 이미 사용해본 경험이 있을 것이다.

2-1. DI(Dependency Injection)이란?

  • 배터리 일체형 : 배터리가 떨어지면 장난감을 새로 구입해야 한다.

  • 배터리 분리형 : 배터리가 떨어지면 배터리만 교체하면 된다.

효과적인 것은 배터리 분리형이다. 이것을 프로그래밍적으로 관점을 바꿔서 객체를 이용해서 수많은 기능을 구현했다고 생각해보자. 객체 하나가 모든 프로젝트에 엮여있다고 생각하면 그 객체를 수정할 때 프로젝트 전체를 바꿔야할 것이다. 하지만 배터리 분리형처럼 객체가 분리되어있다면 객체만 수정하면 된다. 이러한 내용은 객체지향 프로그래밍을 하다보면 흔히 경험할 수 있는 내용이다. 여기서 좀 더 깊이 진입하면 DI라는 개념이 나오는데, 배터리가 장난감에 의존해서 만들어진다고 해서 의존 주입이라고 한다. 좀 더 효과적인 DI 방법은 분리형이라고 할 수 있다. DI는 생각보다 별게 아니다. 흔히 봐왔던 프로그래밍 기법 중 하나다.

public class ElectronicCarToy {
   private Battery battery;
   
   public ElectronicCarToy() {
       battery = new NormalBattery();
  }
}
  • 배터리 일체형 : 생성자를 통해 배터리를 생성하므로 배터리가 떨어지면 장난감을 새로 만들어야한다.

public class ElectronicRobotToy {
   private Battery battery;
   
   public ElectronicRobotToy() {
       this.battery = battery
  }
   
   public void setBattery(Battery battery) {
       this.battery = battery;
  }
}
  • 배터리 분리형 : 장난감을 생성하고 나서 배터리를 수동으로 세팅할 수 있기 때문에 배터리 교체가 가능하다.

어떤 객체에 의존한다 -> 의존성 주입

2-2. 스프링 DI 설정 방법

* 스프링 컨테이너 생성 및 Bean 객체 호출 과정 *

스프링 설정파일Application.xml로부터 GenericXmlApplicationContext 클래스를 통해 Spring ContainergetBean()으로 Bean들을 만들어 놓는다. Bean 객체를 필요로 하는 로직에 자유롭게 갖다가 사용하면 된다. new로 동적 객체 생성이 필요없다. 그러므로 Bean 객체는 상태값이 없고 비즈니스 로직만 처리할 때에 사용하는 것이 좋다.

  • DI는 Bean 내부에 또 다른 객체들이 의존성 주입이 된 것을 말한다. 객체 속에 객체를 가지고 있는 구조를 보고 DI라고 한다.

  • 생성자로 객체를 주입하는 방법과 Setter를 통해 객체를 주입하는 방법이 있다. 생성장로 주입하는 방법은 applicationContext.xml에서 bean 내부에 Constructor-arg 를 선언하여 사용하는 방법이 있다.

  • 클래스 구조 : MainClass -> 조립(applicationContext.xml, assembler) -> service 클래스 -> DAO 클래스


'기술 > Spring' 카테고리의 다른 글

[Spring Study] 스프링 프레임워크 개요  (0) 2018.10.22