'전체 글'에 해당되는 글 1811건

  1. 2011.08.25 Robotlegs mediatorMap.mapView
  2. 2011.08.23 Dependency Injection - 2
  3. 2011.08.23 Dependency Injection - 1
  4. 2011.08.23 Dependency Injection PDF
  5. 2011.08.23 Robotlegs FlashSite Process
  6. 2011.08.23 FlashBuilder4_CodeAssist

Robotlegs mediatorMap.mapView

Adobe Flash 2011. 8. 25. 10:54
반응형

http://api.robotlegs.org/

하나의 Mediator에 두개의 뷰를 매핑시킬수 없나보다..

 
반응형

'Adobe Flash' 카테고리의 다른 글

as3isolib tutorial 1,2  (0) 2011.08.31
네트워킹 및 통신 (소켓)  (0) 2011.08.30
Robotlegs FlashSite Process  (0) 2011.08.23
FlashBuilder4_CodeAssist  (0) 2011.08.23
Robotlegs ContextEvent STARTUP 과 STARTUP_COMPLETE  (0) 2011.08.23
:

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)
제어의 역전을 이해하기 쉬운 예로 유명한 헐리우드 법칙을 들어보겠다.
예전 미국 영화 전성기에 영화의 메카인 헐리우드에 많은 스타 지망생들이 몰려들었다.
많은 스타 지망생이 헐리우드에 에이전시를 찾아가 오디션을 신청하여 에이전시는 이를 매우 귀찮게 여기기 시작했다.
그래서 에이전시는 스타 지망생들에게 이력서만 놓고 그냥 가라고 하면서 이렇게 말했다.

우리를 더 이상 부르지 마시오. 우리가 필요하면 당신을 부르겠소.
(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
:

Dependency Injection - 1

Design Patterns 2011. 8. 23. 17:10
반응형
원문: http://greatkim91.tistory.com/41
http://greatkim91.tistory.com/entry/Dependency-Injection-1

사전적의미
Dependency: 의존, 종속
Injection:  주사, 주입 

String프레임워크나 Struts2, Hibernate등과 같은 프레임웍들도 기본으로 D.I를 지원하는 추세이다.
D.I의 정확한 의미가 무엇인가?

Wiring (와이어링)
객체의 힘 - 추상화, 다형성
OOP의 위대함은 추상화에 있다.객체를 사용하는 클라이언트(Caller)를 실제 사용하는 객체가 뭔지 몰라도 객체의 인터페이스만 알면 일을 시킬수있다.
여기에서 클라이언트가 잡고있는 객체를 클라이언트 모르게 바꾸어도 그 코드는 잘 동작 하고 동일한 인터페이스라도 실제 객체(concrete class)가 어떤 것인지에 따라 그 동작 방법을 바꿀수 있다.
이게 OOP에서 잘 알려진 다형석(polymorphism)이다.
 
Wiring
객체는 보통 홀로 동작하지 않는다. 쓸만한 객체가 작성되었다면 최소한 그것을 사용하는 클라이언트(컨테이너)는 있어야할 것이다.  이와 같이 객체들은 서로 협력하여 목적을 달성하기 위해 다른 객체의 참조르 가지고 이를통해 객체간의 체인이 형성된다 이를 wiring이라 한다. 

 추상화의 힘을 사용하기 위해 보통 인터페이스나 추상(abstract또는 virtual)클래스를 이용하여 객체간 참조 한다.

의도하지 않은 커플링(coupling)
이런 추상화의 힘을 이용하기 위해 객체를 사용하는 클라이언트(caller)는 객체의 인터페이스만을 잡고있지만 사용할 객체를 생성하기 위해 new 연산자를 사용하게 된다.
이렇게 되면 new 연산자에 의해 원하지 않게 구체화된 클래스는 의존관계를 형성하게 된다.


위 그림의 예를 들면 Main클래스는 다음과 같은 코드를 가질 수 있다.

이렇게 의도하지 않은 의존관계를 해결하기 위해 주로 생성과 관련된 패턴을 사용하여 객체 생성을 클라이언트(Caller)로부터 분리 하기도 한다. 

디자인패턴의 종류와 관련은 아래 블로그를 참고: 
http://masamune.tistory.com/84

순진한 코더의 예제
다음에 설명할 DI의 개념 이해를 위해 굉장히 간단한 예제로 이야기 할것이다.
예제는 다음 그림과 같이 임의의 저장소에서 영화 목록을 읽고 특정 감독의 영화 목록을 추출하는 프로그램이다.
저장소는 CSV(Comma Separated Volume)파일이 될 수도 있고, DB나 다른 형태가 될수도 있다.
임의 저장소에서 찾는 동작을 MovieFinder 인터페이스로 정의하고 이것을 구현한다. 

IFinder를 적절히 추상화 했지만 위에서 보듯 MovieList는 의도하지 않게 CSVMovieFinder와 강한 커플링을 형성하고 있다.











 
반응형

'Design Patterns ' 카테고리의 다른 글

as3 design patterns  (0) 2011.09.14
Dependency Injection - 2  (0) 2011.08.23
Dependency Injection PDF  (0) 2011.08.23
classic mvc pattern  (0) 2011.08.12
Pattern Craft - Proxy Pattern  (0) 2011.07.29
:

Dependency Injection PDF

Design Patterns 2011. 8. 23. 17:02
반응형
반응형

'Design Patterns ' 카테고리의 다른 글

as3 design patterns  (0) 2011.09.14
Dependency Injection - 2  (0) 2011.08.23
Dependency Injection - 1  (0) 2011.08.23
classic mvc pattern  (0) 2011.08.12
Pattern Craft - Proxy Pattern  (0) 2011.07.29
:

Robotlegs FlashSite Process

Adobe Flash 2011. 8. 23. 17:00
반응형
[object LoadDataCommand]: execute()
[object SiteDataService]: loadData()
[object SiteDataService]: loadCompleteHandler()
[object SectionVO]
[object SectionVO]
[object SectionVO]
[Event type="null" bubbles=false cancelable=false eventPhase=2]: initView
[object InitViewCommand]
[object InitViewCommand]: execute()
[object SectionContainer]
[object SectionContainerMediator]
[object SectionContainerMediator]::onRegister()
[object SectionContainer]: init(), sectionHash: [object Dictionary]
[object Header]
[object HeaderMediator]
[object HeaderMediator]: onRegister()
[object Header]: init()
[object Navigation]
[object NavigationMediator]
[object NavigationMediator]: onRegister()
[object Navigation]: init() arr: [object SectionVO],[object SectionVO],[object SectionVO]
[object NavButton] id: home labelStr: Home
[object NavButton] id: about labelStr: About PureMVC
[object NavButton] id: examples labelStr: Examples
[Event type="null" bubbles=false cancelable=false eventPhase=2]: navClick
[object SectionSelectedCommand]
[object SectionSelectedCommand]: execute()
[object SiteModel]::currentSection: home
[Event type="null" bubbles=false cancelable=false eventPhase=2]: sectionChanged
[object SectionContainerMediator]::sectionChageHandler() e: sectionChanged
[object SectionContainer]: update(), id: home
[object NavigationMediator]: sectionChageHandler() e: sectionChanged
[object Navigation]: update() id: home
[object NavButton]: update() id: home
[object NavButton]: update() id: home
[object NavButton]: update() id: home
[SWF] E:\Documents and Settings\jang2\Adobe Flash Builder 4.5\Robotlegs FlashSite Example\bin-debug\RobotlegsFlashSite.swf - 8,552,746 bytes after decompression
[object NavigationMediator]: navClickHandler() e: click
[Event type="null" bubbles=false cancelable=false eventPhase=2]: navClick
[object SectionSelectedCommand]
[object SectionSelectedCommand]: execute()
[object SiteModel]::currentSection: about
[Event type="null" bubbles=false cancelable=false eventPhase=2]: sectionChanged
[object SectionContainerMediator]::sectionChageHandler() e: sectionChanged
[object SectionContainer]: update(), id: about
[object NavigationMediator]: sectionChageHandler() e: sectionChanged
[object Navigation]: update() id: about
[object NavButton]: update() id: about
[object NavButton]: update() id: about
[object NavButton]: update() id: about

반응형

'Adobe Flash' 카테고리의 다른 글

네트워킹 및 통신 (소켓)  (0) 2011.08.30
Robotlegs mediatorMap.mapView  (0) 2011.08.25
FlashBuilder4_CodeAssist  (0) 2011.08.23
Robotlegs ContextEvent STARTUP 과 STARTUP_COMPLETE  (0) 2011.08.23
robotlegs  (0) 2011.08.19
:

FlashBuilder4_CodeAssist

Adobe Flash 2011. 8. 23. 14:43
반응형


반응형

'Adobe Flash' 카테고리의 다른 글

Robotlegs mediatorMap.mapView  (0) 2011.08.25
Robotlegs FlashSite Process  (0) 2011.08.23
Robotlegs ContextEvent STARTUP 과 STARTUP_COMPLETE  (0) 2011.08.23
robotlegs  (0) 2011.08.19
IsoViewBasics  (0) 2011.08.05
: