SWC로 부터 동적으로 클래스를 가져오기
어느 정도는 전에 쓴 글인 ApplicationDomain 과 연관이 있는 글이라 할 수 있다. 따라서 먼저 기존의 http://www.diebuster.com/?p=660 를 읽어보길 권한다.
클래스의 정의를 담는 SWF를 생성하기
ApplictionDomain에서 swf 를 통해 클래스를 로딩하는 경우 해당 swf 안에 그 클래스의 정의가 들어가 있어야 한다. 대체 클래스의 정의가 들어가 있는 swf의 모양은 무엇일까?
예상되는 형태로 Main 클래스에 private var test:Class=TestClass; 라는 식으로 쭉 필요한 만큼 클래스를 속성으로 선언하여 mxmlc가 강제로 클래스 정의를 로딩하게 하는 방법이 있다. 하지만 몇 가지 문제점을 내포하고 있다.
- Main 클래스 즉 Application Class는 반드시 Sprite 또는 MovieClip을 상속받는데 단순 클래스 로딩만 필요한 경우 이는 쓸데 없다.
- internal 이나 private, namespace 등이 관련된 클래스의 경우 Main에 선언 하는 것 만으로는 로딩할 수 없다.
- 결국 개발자가 var 를 선언하여 클래스를 로딩하기 때문에 이 과정에서 실수할 가능성이 높고, 클래스를 업데이트 할 때마다 이 위험을 항상 같이 가져간다.
그럼 어떻게 하는 게 가장 좋은 방법일까?
표준적인 라이브러리 생성방법인 compc컴파일러를 통한 swc 로 출력하는 게 가장 좋은 방법이다. swc 를 생성하는 경우 정확하게 해당 클래스의 정의만 로딩하므로 용량이 최소로 될 뿐만 아니라 복잡한 제한자에 상관없이 클래스 단위로 포함, 불포함을 정할 수 있다. 또한 빌더의 플렉스 라이브러리 프로젝트를 통해 관리하면 manifest와 catalog를 매우 쉽게 관리할 수 있다. 그래서 라이브러리 프로젝트를 생성하여 사용하는 방법을 설명할 줄 아는가 ^^; 아니다 그건 알아서들 해결하길 바란다. 지금부터 말하려는 게 진짜 이 글의 주제다.