1 분 소요

Spring

Spring이 가지고 있는 가장 기본적인 능력

원하는 부품(Dependency)이 무엇인지, 어떻게 결합(Injection)되었으면 하는지 설정해주면 Spring이 DI해준다

DI(Dependency Injection)

(=부품 조립)

프로그램을 객체지향으로 만들게 될 경우, 객체들의 조립관계로 만들어지게 된다.

A라는 클래스가 B라는 클래스를 객체화 해서 사용하고 있다고 할 때 두가지 방법으로 사용할 수 있다.

  • 1.Composition has a (일체형)
    class A{
      private B b;  
        
      public A(){
        b = new B(); //A가 B를 직접 생성
      }
    }
    

    A가 생성될때 B의 객체를 생성해서 가진다.
    이 경우 A가 B를 일체형으로 가졌다고 해서 Composition(일체형) has a 관계라고 한다.

    이때 B를 A의 부품이라고 할 수 있는데, 이 B를 Dependency(부품)라고 한다.

  • 2.Association has a (조립형)
    class A{
      private B b;  
        
      public A(){
        // b = new B();
      }
    
      public void setB(B b){
        this.b = b;
      }
    }
    

    A가 B를 직접 생성하지 않는다.
    외부에서 생성해서 그 생성을 setB로 setting하여 사용한다.
    이 경우 조립형 관계라고 한다.

일체형보다 조립형이 결합력이 훨씬 더 낮고 다른 부품으로 바꿔 끼울 수 있다

  • 1번 일체형의 경우
A a = new A();

사용자 입장에서 A의 객체를 만들면 그 안에 부품이 뭐가 있는지 잘 모르게 되고 부품을 바꿔 끼울 수 없다.

  • 2번 조립형의 경우
B b = new B();
A a = new A();

a.setB(b);

A의 객체를 만들고 A가 가지고 있는 부품 B(Dependency)를 만들어서 꽂아준다.(Injection)(=Dependency Injection)

장점 : 부품을 바꿔 끼울 수 있다.
단점 : 부품을 조립해야 하는 불편함이 있다.

Injection의 두가지 방법

  • Setter Injection
B b = new B();
A a = new A();

a.setB(b);
  • Construction Injection
B b = new B();
A a = new A(b);

IoC Container

여러가지 부품들을 주문서에 작성해서 Spring에게 제공하면 부품을 생성하고 조립해 준다.

주문서 작성 방법 두 가지

  • xml파일
  • Annotation

객체를 생성해서 그것들을 담을 수 있는 그릇이 필요한데 이를 Spring에서 Container 라고 한다.

- IoC Container라고 하는 이유

image
위 사진과 같이 일체형으로 제품을 만들게 되면 A클래스가 B클래스를 만들고, B클래스가 C클래스를, C클래스가 D클래스를 만들게 된다.
즉 순차적으로 객체가 만들어진다.

image
반면 위 사진과 같이 조립형은 D클래스, C클래스, B클래스, A클래스 순으로 만들어 진다.
즉 역순(Inversion)으로 만들어진다.

위와 같은 이유로 IoC(Inversion of Control) Container라고 한다.

단순히 부품만 담고 있다면 Dependency Container라고 할텐데 IoC Container 라고 하는 이유는 결합까지 되서 담겨진다는 의미를 좀 더 강하게 나타내기 위해서 이다.

카테고리:

업데이트:

댓글남기기