ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링] 제어 역전 또는 의존성 주입1
    IT 발자취.../스프링 2018. 12. 12. 20:10

    스프링에서 중요한 제어 역전 또는 의존성 주입을
    알아보겠습니다. 
    내용이 길어질 것 같은 느낌이 듭니다...

    스프링 프레임워크의 코어는 제어 역전(IoC) 원칙을 기반으로 합니다.
    IoC는 컴포넌트 의존성의 생성 및 관리를 외부화하는 기법입니다.
    이게 무슨말이냐?!!

    예를 들면, 클래스 Foo가 클래스 B의 인스턴스에
    의존해 어떤 작업을 수행한다고 가정합니다.
    기본의 방법으로는 Foo가 new 연산자를 사용해 Bar인스턴스를
    생성하거나 팩터리 클래스를 통해 인스턴스를 가져옵니다.

    //Foo클래스 class Foo { ...생략 //Bar인스턴스 생성 Bar b = new Bar(); ...생략 }

    하지만 IoC 접근 방식을 사용하면 Bar(또는 하위 클래스)
    인스턴스가 외부 프로세스를 통해 런타임 시점에 Foo에게 제공됩니다.
    런타임 시점에 의존성을 주입하는 이런 동작을 나중에
    마틴 파울러가 의존성 주입(DI)이라는 서술적인 이름으로
    고쳐 부르게됩니다.

    스프링의 DI 구현체는 두 가지 핵심 자바 개념을 근간으로 합니다. 바로 자바빈과 인터페이스입니다.
    ※스프링에서 관리하는 모든 리소스는 빈이라고 부릅니다.
    1. 인터페이스와 DI는 서로 도움이 되는 기술입니다. 인터페이스를 사용해 설계하고 코딩하면 유연한 애플리케이션을 만들 수 있습니다. 하지만 인터페이스를 통해 설계한 애플리케이션을 서로 연결하는 작업은 매우 복잡하고 개발자들에게 추가적인 코딩 부담을 안겨줍니다. DI를 사용하면 애플리케이션에서 인터페이스 기반의 설계를 사용하는 데 필요한 코드 양을 거의 0으로 줄일 수 있습니다. 마찬가지로 인터페이스를 사용하면 빈이 아무 인터페이스 구현체나 사용해 의존성을 충족할 수 있으므로 DI를 가장 잘 활용할 수 있습니다.

    DI와 관련해 스프링은 프레임워크보다는 컨테이녀 역할을 합니다.
    즉, 애플리케이션의 클래스 인스턴스에 필요한 의존성을 모두 제공하는 역할을 하는데, 
    스프링은 이 작업을 강압적이지 않은 방식으로 처리합니다. 
    DI에 스프링을 사용할 때는 클래스 내에서 자바빈 명명 관계를 따르는 것
    이외에 아무것도 요구하지 않습니다.

    즉, 스프링 클래스를 상속하지 않아도 되고,
    고유의 명명 스키마를 따르지 않아도 됩니다.
    다만 DI를 사용하는 애플리케이션에서 수정할 부분이 있다면 런타임 시점에
    더 많은 의존성을 주입할 수 있게 자바빈에서 더 많은 프로퍼티를 노출하기만 하면 됩니다.


    댓글

Designed by Gintire