Dependency Injection - 2
Design Patterns 2011. 8. 23. 18:11반응형
원문: http://greatkim91.tistory.com/41
http://greatkim91.tistory.com/entry/Dependency-Injection-1
IoC 그리고 Dependency Injection
제어의 역전(Inversion of Control)
이 개념은 어떤 일을 하는 주체를 바꾸는것을 의미하는데 통상적으로 일을 처리하는 주도권을 상대에게 넘겨준다는 의미이다.
헐리우드 법칙(Hollywood Principle)
제어의 역전을 이해하기 쉬운 예로 유명한 헐리우드 법칙을 들어보겠다.
예전 미국 영화 전성기에 영화의 메카인 헐리우드에 많은 스타 지망생들이 몰려들었다.
많은 스타 지망생이 헐리우드에 에이전시를 찾아가 오디션을 신청하여 에이전시는 이를 매우 귀찮게 여기기 시작했다.
그래서 에이전시는 스타 지망생들에게 이력서만 놓고 그냥 가라고 하면서 이렇게 말했다.
소프트웨어에서의 헐리우드 법칙
소프트웨어 세계에서도 헐리우드 법칙이 오래전부터 적용되고 있었다.
전형적인 예로 Command line프로그램과 GUI프로그램을 들 수 있다.
최초의 Command line기반 프로그램은 아래 그림과 같이 모든 제어를 내 프로그램이 담당했다.
입력이 필요하면 입력을 요청한후 대기하고 입력이 들어오면 뭔가 해서 또 스스로 출력 하기도 한다.
반면 GUI프로그램이 보편화 되면서 많은 GUI프레임 뭐크들이 출현하였다.
우리가 이 GUI프로그램을 할때 모든 입력 요청과 출력 그리고 이벤트 처리들과 같은 주요한 동작은 GUI프레임워크가 주도하여 실행한다.
우리는 단지 특정 이벤트에 대해 어떻게 반응 할 것인지에 대한 콜백(callback, event handler) 프로그램만 작성하여 넣기만 한다.
이렇듯 더이상 우리가 어떤것을 주도하여 호출하는것이 아니라 주도권은 빼앗기고 호출 당하기를 기다리는 콜백 프로그램을 만드는 일이 주가 되었다.
이를 Inversion Of Control이라고 하는 프레임워크의 일반적인 속성이다.
D.I는 객체 Wiring하는 문제를 이 IoC개념을 이용하여 풀어보자는 시도에서 출발한다.
(IoC와 D.I가 동의어로 사용되는 경우를 보았는데 그건아니다)
그럼 이제 제어의 역전 개념을 이용하여 전에 보았던 영화목록 찾기 프로그램의 의존관계 문제를 풀어보자.
의존성 주입 (Dependency Injection)
아이디어는 간단하다.
순진한 코더의 프로그램은 MovieLister가 능동적으로 자신이 사용할 구체적인 클래스를 생성했다는데에서 문제가 발생했다.
이것을 IoC아이디어를 빌려와서 사용할 객체의 생성을 다른 객체에게 맡겨보자.
그리고 자신에게 그 객체를 넘겨달라고 하자
http://greatkim91.tistory.com/entry/Dependency-Injection-1
IoC 그리고 Dependency Injection
제어의 역전(Inversion of Control)
이 개념은 어떤 일을 하는 주체를 바꾸는것을 의미하는데 통상적으로 일을 처리하는 주도권을 상대에게 넘겨준다는 의미이다.
헐리우드 법칙(Hollywood Principle)
제어의 역전을 이해하기 쉬운 예로 유명한 헐리우드 법칙을 들어보겠다.
예전 미국 영화 전성기에 영화의 메카인 헐리우드에 많은 스타 지망생들이 몰려들었다.
많은 스타 지망생이 헐리우드에 에이전시를 찾아가 오디션을 신청하여 에이전시는 이를 매우 귀찮게 여기기 시작했다.
그래서 에이전시는 스타 지망생들에게 이력서만 놓고 그냥 가라고 하면서 이렇게 말했다.
우리를 더 이상 부르지 마시오. 우리가 필요하면 당신을 부르겠소.
(Do not call us, We will call you)
소프트웨어에서의 헐리우드 법칙
소프트웨어 세계에서도 헐리우드 법칙이 오래전부터 적용되고 있었다.
전형적인 예로 Command line프로그램과 GUI프로그램을 들 수 있다.
최초의 Command line기반 프로그램은 아래 그림과 같이 모든 제어를 내 프로그램이 담당했다.
입력이 필요하면 입력을 요청한후 대기하고 입력이 들어오면 뭔가 해서 또 스스로 출력 하기도 한다.
반면 GUI프로그램이 보편화 되면서 많은 GUI프레임 뭐크들이 출현하였다.
우리가 이 GUI프로그램을 할때 모든 입력 요청과 출력 그리고 이벤트 처리들과 같은 주요한 동작은 GUI프레임워크가 주도하여 실행한다.
우리는 단지 특정 이벤트에 대해 어떻게 반응 할 것인지에 대한 콜백(callback, event handler) 프로그램만 작성하여 넣기만 한다.
이렇듯 더이상 우리가 어떤것을 주도하여 호출하는것이 아니라 주도권은 빼앗기고 호출 당하기를 기다리는 콜백 프로그램을 만드는 일이 주가 되었다.
이를 Inversion Of Control이라고 하는 프레임워크의 일반적인 속성이다.
D.I는 객체 Wiring하는 문제를 이 IoC개념을 이용하여 풀어보자는 시도에서 출발한다.
(IoC와 D.I가 동의어로 사용되는 경우를 보았는데 그건아니다)
그럼 이제 제어의 역전 개념을 이용하여 전에 보았던 영화목록 찾기 프로그램의 의존관계 문제를 풀어보자.
의존성 주입 (Dependency Injection)
아이디어는 간단하다.
순진한 코더의 프로그램은 MovieLister가 능동적으로 자신이 사용할 구체적인 클래스를 생성했다는데에서 문제가 발생했다.
이것을 IoC아이디어를 빌려와서 사용할 객체의 생성을 다른 객체에게 맡겨보자.
그리고 자신에게 그 객체를 넘겨달라고 하자
반응형
'Design Patterns ' 카테고리의 다른 글
GOF디자인 패턴 각 행위 정리 (0) | 2011.09.30 |
---|---|
as3 design patterns (0) | 2011.09.14 |
Dependency Injection - 1 (0) | 2011.08.23 |
Dependency Injection PDF (0) | 2011.08.23 |
classic mvc pattern (0) | 2011.08.12 |