스프링 DI

최범균님의 스프링 프로그래밍 입문 이라는 책을 통해 공부한 부분을 블로그에 정리하고자 합니다. 잘못되거나 부족한 부분이 있으면 언제든 댓글로 가르침 부탁드립니다.

목차

  1. 의존이란?
  2. 의존성 주입(Dependency Injection)을 통한 의존 처리
  3. DI 2가지 방법



1. 의존이란?

A클래스가 B클래스의 메소드를 실행할 때, A는 B에게 의존한다 라고 한다. 이 말은 곧 A는 B의 변경에 영향을 받는다 라고 할 수 있다. 가장 쉬운 예시로 휴대폰과 배터리를 들 수 있다.

class Phone{
  Battery bt = new Battery;
  bt.turnOn():
}

휴대폰 클래스는 배터리 클래스에 의존한다고 할 수 있다.



2. 의존성 주입(Dependency Injection)을 통한 의존 처리

의존성 주입은 서로 의존하는 객체를 직접 생성하는 것이 아닌 의존 객체를 전달 받는 방식을 의미한다. 의존적 주입 방식을 사용하는 이유는 변경의 유연함 때문이다.
다음과 같은 2개의 휴대폰에 Battery 라는 객체가 들어간다고 하자.

class PhoneA{
  Battery bt = new Battery;
  bt.turnOn():
}
class PhoneB{
  Battery bt = new Battery;
  bt.turnOn():
}

그러다 앞으로 Battery2 라는 객체를 쓰기로 결정했다면, 생산자는 모든 휴대폰 클래스에서 배터리 코드를 수정해야 한다. 만약 의존적 주입 방식을 통해 이미 생성된 객체를 전달받는다면 객체 생성 코드에서 배터리 객체만 수정하면 되기 때문에 코드의 유지보수 측면에서 매우 효율성이 높아진다.



3. DI 2가지 방법

스프링 컨테이너를 통한 의존성 주입 방법은 2가지다.

  • 생성자 방식
  • setter 메소드 방식

생성자 방식

class Phone{
  private Battery battery;
  
  public Phone (Battery battery){
    this battery = battery;
  }
}

컨테이너에서 battery 객체를 Phone 객체 생성자를 통해 주입한다.

setter 메소드 방식

class Phone{
  private Battery battery;
  
  public setBattery (Battery battery){
    this battery = battery;
  }
}

컨테이너에서 battery 객체를 Phone 객체 setter 메소드를 통해 주입한다.

Published 1 Apr 2019


jaegoon on github