어떻게 ApplicationDomain을 이용하면 될 수 있을 것 같았는데,

 

물론,

var lc:LoaderContext = new LoaderContext()
lc.applicationDomain = new ApplicationDomain(); // or new ApplicationDomain(ApplicationDomain.currentDomain);
var cls:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("com.SourceClass")  as  Class;
var sc:Object = new cls();

위와 같이, ApplicationDomain.getDifinition()을 이용하면 문제 없지만, 클래스타입을 지정할 수 없고, 내가 원하는 건 직접 new를 통한 클래스 생성이다.

 

시나리오는 이렇다.

 

우선 필요한 클래스가 포함되어 있는 classAssets.swf파일을 생성한다. 의도에 따라서 업데이트가 이루어지는 파일이다.

이 파일을 로드해서 동적으로 클래스를 이용하는 main.swf파일이 있다. 이 파일은 처음 classAssets.swf를 로드 한 후 각각의 필요한 클래스를 생성해서 사용한다.

 

갱신 할 클래스 파일을 classAssets.swf에 포함 시키면 main.swf에서 로드후 자동으로 갱신되어 적용된다.

 

위와 같은 시나리오대로 작동시킬 방법이 우선 한 가지 있다.

 

LoaderContext.applicationDomain을 ApplicationDomain.currentDomain으로 설정하고 classAssets.swf에서 main.swf를 로드하는 것이다. 그렇게 되면, main.swf의 클래스중 classAssets.swf에 포함된 클래스는 부모의 것으로 갱신되게 된다. (F1에서는 이런 경우 에러를 발생시키고 로드가 멈춰진다고 하는데 (어느 것이 틀린건지 아니면 내가 잘 못 안 것인지) 그렇지는 않다.)

 

하지만, 내가 원하는 것은 시나리오대로 main.swf에서 classAssets.swf를 로드하는 방식이다.

 

F1은 RSL로 사용할 수 있다고 유혹하고 있는데...

계속 연구중...

 

                                                                                                                                                                                

 

검색 결과, 자식 .swf로 부모의 클래스를 갱신 할 수 없다고 한다. 그렇다면, 위 시나리오대로의 구현은 불가능하다.

 

ApplicationDomain.currentDomain.getDefinition()을 이용하거나, 위에서 언급했던 역방향으로 구현하는 방법을 조금 더 연구해봐야겠다.