ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • IoC/DI 다시 개념잡기..
    카테고리 없음 2018. 4. 4. 23:33
    Spring Framework를 공부하며 반복적으로 나오는 핵심적인 개념인 IoC/DI.

    제어의 역전, 의존성 주입으로 번역되어 그런가 보다~ 수준으로 항상 눈으로 텍스트를 반복해 읽었지만, 개념적인 컨텍스트가 이해되지 않았던 개념.

    왜 필요한지? 에 대한 물음이 앞서지 않았기 때문에 같은 내용을 반복적으로 접하더라도 이해도는 바닥을 치곤했으나, Spring을 접하고 2년여가 지나서야 무슨 의미인지 이해한 기념으로 다시한번 정리하고자 한다.


    어떤 친절하신 분의 블로그 글을 재작성하며 정리하고자 한다. 

    원문은 아래의 링크를 참조하길 바란다. 


    우선 DI의 개념을 이해하기 위해 IoC가 무엇인지부터 알아보자. 


    IoC (Inversion of Control - 제어의 역전)란?


    IoC란 프로그램 제어 흐름 구조가 바뀌는 것이다. 


    일반적으로, main() 같은 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정, 생성하고, 만들어진 오브젝트 내의 메소드를 호출하는 작업을 반복한다. 이러한 구조에서는 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조이다. 


    반면에 IoC는 제어 흐름의 개념을 뒤집는다. 오브젝트는 자신이 사용할 오브젝트를 생성하거나 선택하지 않는다. 또한 오브젝트 자신이 어떻게 만들어지고 어디에 사용되는지 알지 못한다. 모든 제어 권한을 다른 대상에게 위임하는 것이다. 이런 방식으로 위임받은 제어 권한을 갖는 특별한 오브젝트에 의해 결정되고 만들어지는 개념이 IoC 이다. 


    요약하면 다음과 같다

    1) IoC에서는 Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.

    2) Object는 자신이 어떻게 생성되고 사용되는지 알 수 없다. 

    3) 모든 Object는 제어 권한을 위임받은 특별한 Object에 의해 만들어지고 사용된다.




    IoC의 개념에 대해 살펴보았으면 IoC의 구현 방법인 DI(Dependency Injection) - 의존성 주입에 대해 알아보자.


    DI (Dependency Injection) - 의존성 주입 


    각 계층 사이, 각 클래스 사이에 필요로 하는 의존 관계를 컨테이너가 자동으로 연결해주는 것.

    각 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것 




    추가적으로  IoC 에서 사용되는 용어를 정리해보자

    bean - 스프링에서 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트

    bean factory - 스프링의 IoC를 담당하는 핵심 컨테이너

    application context - bean factory를 확장한 IoC 컨테이너

    configure metadata - application context or bean factory가 IoC를 적용하기 위해 사용하는 메타정보 

    container (IoC container) - IoC 방식으로 bean을 관리한다는 의미에서 bean factory 나 application context를 가리킨다.

    spring framework - IoC container, application context를 포함해서 spring이 제공하는 모든 기능을 통칭한다. 



    자 그러면 IoC/DI는 왜? 필요한가에 대해 답해보고자한다.


    IoC/DI 를 사용하지 않는다면. 코드에 대한 유지/보수가 매우어렵다. 특정 Object를 참조하여 생성해서 기능을 이용하고 있는 코드가 있다면, 

    만약 이 Object를 변경한다면... 어마무시한 작업이 시작되는 것이다.


    하지만 IoC/DI를 방식을 통해 코드를 작성했다고한다면, 번거럽고 때론 위험한 수정을 피할 수 있다. 

    Container 를 이용한 bean 만 수정해주면 손쉽게 해결할 수 있다.


    사실 IoC/DI의 장점을 최대한 이용하기 위해서는 유지/보수가 빈번히 발생하는 프로젝트를 관리해봐야만 정수를 맛볼수 있지 않을까 싶다.










Designed by Tistory.