Posts tagged ‘ApplicationDomain’

SWC로 부터 동적으로 클래스를 가져오기

어느 정도는 전에 쓴 글인 ApplicationDomain 과 연관이 있는 글이라 할 수 있다. 따라서 먼저 기존의 http://www.diebuster.com/?p=660 를 읽어보길 권한다.

클래스의 정의를 담는 SWF를 생성하기

ApplictionDomain에서 swf 를 통해 클래스를 로딩하는 경우 해당 swf 안에 그 클래스의 정의가 들어가 있어야 한다. 대체 클래스의 정의가 들어가 있는 swf의 모양은 무엇일까?

예상되는 형태로 Main 클래스에 private var test:Class=TestClass; 라는 식으로 쭉 필요한 만큼 클래스를 속성으로 선언하여 mxmlc가 강제로 클래스 정의를 로딩하게 하는 방법이 있다. 하지만 몇 가지 문제점을 내포하고 있다.

  1. Main 클래스 즉 Application Class는 반드시 Sprite 또는 MovieClip을 상속받는데 단순 클래스 로딩만 필요한 경우 이는 쓸데 없다.
  2. internal 이나 private, namespace 등이 관련된 클래스의 경우 Main에 선언 하는 것 만으로는 로딩할 수 없다.
  3. 결국 개발자가 var 를 선언하여 클래스를 로딩하기 때문에 이 과정에서 실수할 가능성이 높고, 클래스를 업데이트 할 때마다 이 위험을 항상 같이 가져간다.

그럼 어떻게 하는 게 가장 좋은 방법일까?

표준적인 라이브러리 생성방법인 compc컴파일러를 통한 swc 로 출력하는 게 가장 좋은 방법이다. swc 를 생성하는 경우 정확하게 해당 클래스의 정의만 로딩하므로 용량이 최소로 될 뿐만 아니라 복잡한 제한자에 상관없이 클래스 단위로 포함, 불포함을 정할 수 있다. 또한 빌더의 플렉스 라이브러리 프로젝트를 통해 관리하면 manifest와 catalog를 매우 쉽게 관리할 수 있다. 그래서 라이브러리 프로젝트를 생성하여 사용하는 방법을 설명할 줄 아는가 ^^; 아니다 그건 알아서들 해결하길 바란다. 지금부터 말하려는 게 진짜 이 글의 주제다.

Continue reading ‘SWC로 부터 동적으로 클래스를 가져오기’ »

ApplicationDomain과 runtime class loading

함수와 클래스의 정의는 어떻게 사용되는걸까?

먼저 메모리에서 일어나는 일을 생각해보자. 함수는 한 번만 정의하면 여러 번 호출할 수 있다. 실제 런타임 시, 메모리에 함수의 정의가 한 번만 저장되고 호출 시에는 이 저장된 메모리 영역을 호출하는 것으로 이해할 수 있다(실제로 그렇다)
그럼 클래스의 경우는 어떨까? 클래스도 메쏘드 부분은 함수와 마찬가지로 메모리에 한 번만 정의를 기록하고, 속성만 인스턴스별로 저장하는 것으로 생각할 수 있다.  즉 함수의 정의와 동일한 상태에서 마치 c의 구조체처럼 인스턴스별 속성을 저장하는 형태를 상상하면 쉬울 것이다. 실제로 초창기 c++컴파일러들은 어셈블리를 생성하지 않고 c로 번역하는 식으로 작동했는데 이 때 클래스를 구조체와 구조체의 포인터를 받는 함수로 번역해주는 형태였다.
Continue reading ‘ApplicationDomain과 runtime class loading’ »