DI / IOC

Codren·2021년 6월 15일
1
post-custom-banner

Section 1. Dependency Injection

1. Dependency (의존성)

하나의 클래스가 자신의 멤버변수로 다른 객체를 소유하고 있는 것

  • Dependency 를 '의존성' 이 아닌 하나의 '부품'이라고 생각




2. 의존성 관계

Class A {

    B b;
    C c;
    D d;

    public A(){				// composition 관계 

        b = new B();
    }

    public A(C c){			// aggregation 관계

        this.c = c;
    }

 
    public void setD(D d) {		// association 관계

        this.d = d;
    }
}
  • A와 B는 composition 관계
    - B의 instance는 A와 life cycle을 같이 하고 있음 (밀접한 관계 = 일체형)

  • A와 C는 aggregation 관계
    - C의 instance는 외부에서 만들어지기 때문에 A의 life cycle와 전혀 상관이 없음 (느슨한 관계 = 조립형)

  • A와 D는 association 관계
    - aggregation과 차이는 A class가 D의 instance를 선택적으로 가짐 (느슨한 관계 = 조립형)





3. 일체형 종속 (composition)

  • A 클래스 안에 어떤 객체가 종속되었는지 한눈에 알 수가 없음
A a = new A();




4. Dependency Injection (의존성 주입, 종속성 주입)

클래스에 의존성을 주입한다는 의미이지만 이해하기 쉽게 부품 조립, 부품 장착이라고 생각하기

  • Setter Injection (setter 메서드 인젝션)
B b = new B();
D d = new D();

a.setD(d);		// 의존성 주입

  • Construction Injection (생성자 인젝션)
B b = new b();
A a = new A(b);		// 의존성 주입



Section 2. Inversion Of Control

1. Inversion Of Control (제어의 역전)

프로그램의 제어 흐름을 프로그래머가 직접 제어하는 것이 아니라 외부에서 관리하는 것

  • 프로그래머 -> Spring Framework 로 제어가 넘어감




2. IOC Container

  • XML 설정 파일이나 어노테이션을 이용해서 의존성을 명시한 객체를 생성 및 관리하는 컨테이너
  • Dependency Injection 을 알아서 서비스 해줌




3. DI / IOC

느슨한 결합력을 실현하기 위해 객체의 생성 및 관리 제어를 IOC 컨테이너를 이용해서 DI 서비스를 제공하는 것이 Spring Framework 의 기능

post-custom-banner

0개의 댓글