본문 바로가기

Back-end/Spring

스프링 DI

본문 내용은 초보 웹 개발자를 위한 스프링5 프로그래밍 입문(최범균)을 참고하고 있습니다.


DI

  • DI는 'Dependency Injection'의 약자로 우리말로는 '의존 주입'이라고 한다.
  • 의존이란 변경에 의해 영향을 받는 관계를 의미하며, 한 클래스가 다른 클래스의 메소드를 실행할 때 이를 '의존'한다고 표현할 수 있다.

DI를 통한 의존 처리

  • DI는 의존하는 객체를 직접 생성하는 대신 의존 객체를 전달 받는 방식을 사용한다.

ex)

public class MemberService {

    // 의존 객체를 직접 생성하는 방법

    private MemberDao memberDao = new MemberDao()

    ...

}

 

public class MemberService {

    private MemberDao memberDao;

 

    public MemberService(MemberDao memberDao) {

        // 의존 객체를 전달받는 방법

        this.memberDao = memberDao;

    }

}


 

DI를 사용하면 의존 주입 대상이 되는 객체를 생성하는 코드를 한 곳에 설정할 수 있다. 따라서 의존 객체를 직접 생성했던 방식에 비해 변경할 코드가 한 곳으로 집중되는 장점이 있다.

 

@Configuration

  • 스프링 설정 클래스를 의미한다.
  • 이 애노테이션을 붙여야 스프링 설정 클래스로 사용할 수 있다.

@Bean

  • 해당 메소드가 생성한 객체를 스프링 빈이라고 설정한다.
  • 메소드 이름을 빈 객체의 이름으로 설정한다.

DI 방식 1 : 생성자 방식

  • 빈 객체를 생성하는 시점에 모든 의존 객체가 주입된다.
  • 생성자에게 파라미터를 만들어두고 이를 통해 DI 컨테이너가 의존할 오브젝트 레퍼런스를 넘겨주도록 만든다.

DI 방식 2 : Setter 메소드 방식

  • 세터 메소드의 이름을 통해 어떤 의존 객체가 주입되는지 알 수 있다.
  • 외부에서 오브젝트 내부의 속성 값을 변경하려는 용도로 주로 사용된다.
  • 한 번에 한 개의 파라미터만 받을 수 있다.
  • 외부로부터 제공받은 오브젝트 레퍼런스를 저장해두었다가 내부의 메소드에서 사용한다.

주입 대상 객체를 모두 빈 객체로 설정해야 하나?

객체를 스프링 빈으로 등록할 때와 등록하지 않을 때의 차이는 스프링 컨테이너가 객체를 관리하는지의 여부이다. 따라서 스프링 컨테이너가 제공하는 관리 기능이 없고 getBean() 메소드로 구할 필요가 없다면 반드시 빈 객체로 설정할 필요는 없다. 하지만 의존 자동 주입 기능을 프로젝트 전반에 걸쳐 사용하는 추세이기 때문에 의존 주입 대상은 보통 빈으로 등록한다.

'Back-end > Spring' 카테고리의 다른 글

빈 라이프 사이클과 범위  (0) 2021.10.01
컴포넌트 스캔(@Component, @ComponentScan) - 학습필요  (0) 2021.10.01
의존 자동 주입  (0) 2021.10.01
싱글톤(Singleton) 객체  (0) 2021.10.01
스프링 컨테이너  (0) 2021.10.01