[스프링1일차]DI(Dependency Injection)

JIN·2023년 4월 17일
0

Spring

목록 보기
3/5

1. IoC (Inversion of Control, 제어의 역행)

  • 객체지향 언어에서 Object간의 연결 관계를 런타임에 결정

  • 객체 간의 관계가 느슨하게 연결됨(loose coupling)

  • IoC의 구현 방법 중 하나가 DI(Dependency Injection)

  • Spring DI Container

    • Spring DI Container가 관리하는 객체를 빈(Bean)이라 한다
    • 빈 들의 생명주기(life-cycle)를 관리한다는 뜻으로 빈 팩토리(BeanFactory)라 한다.
    • BeanFactory에 여러 가지 컨테이너 기능을 추가한 ApplicationContext가 있다.
  • 객체 제어 방식

    • 기존 : 필요한 위치에서 개발자가 필요한 객체 생성 로직 구현
    • IoC : 객체 생성을 Container에게 위임하여 처리
  • IoC 사용에 따른 장점

    • 객체 간의 결합도를 떨어뜨릴 수 있음 (loose coupling)
  • 객체간 결합도가 높으면?

    • 해당 클래스가 유지보수될 때 그 클래스와 결합된 다른 클래스도 같이 유지보수 되어야 할 가능성이 높음

2. DI(Dependency Injection) -> 의존성 주입


- 객체 간의 결합을 느슨하게 하는 스프링의 핵심 기술이다

  • 객체사이의 의존관계를 자기자신이 아닌 외부에 의해서 설정된다는 개념이다

  • 제어의 역행(IoC)이라는 의미로 사용한다.

  • DI컨테이너는 어떤 클래스가 필요로 하는 인스턴스를 자동으로 생성, 취득하여 연결시켜주는 역할을 한다.

  • 느슨한 결합(loose coupling)의 주요강점

    • 객체는 인터페이스에 의한 의존관계만을 알고 있으며, 이 의존관계는 구현 클래스에 대한 차이를 모르는 채 서로 다른 구현으로 대체가 가능하다

  • 객체간 결합도가 강한 프로그램
    • HelloApp에서 MessageBean을 직접 객체 생성하여 사용하고 있다.
    • MessageBean 클래스를 다른 클래스로 변경할 경우 HelloApp의 소스를 같이 수정해주어야 한다.

  • 인터페이스를 사용하여 객체간 결합도를 낮춘 프로그램
    • HelloApp은 MessageBean이라는 인터페이스를 통해서 객체를 사용한다
    • 일반적으로 팩토리 메서드를 활용하여 사용할 객체(MessageBeanKo 또는 MessageBeanEn)를 생성한다. MessageBean이라는 MessageBeanKo의 객체가 생성되든 MessageBeanEn의 객체가 생성되든 HelloApp는 수정될 사항이 없다.

  • 스프링을 사용한 객체간 결합도를 낮춘 프로그램
    • 프로그램에서 필요한 객체를 스프링컨테이너가 미리 생성하여 이 객체를 필요로 하는 프로그램에 생성자 또는 Setter 메서드를 통해서 전달(주입)한다.
    • 어떠한 개게를 생성하여 전달할지는 디스크립터 파일(XML로 작성)을 한다.

※ 스프링 설정파일

  • bean요소의 설정

※ 의존 관계를 관리하기 위한 방법
1. Constructor Injection
생성자를 통해서 의존관계를 연결시키는 것을 말함
2. Setter Injection
클래스 사이의 의존관계를 연결시키기 위해서 setter메소드를 이용하는 방법을 말함

0개의 댓글