ApplicationDomain Ŭ·¡½º

ApplicationDomain Ŭ·¡½ºÀÇ ¸ñÀûÀº, ActionScript 3.0 ÀÇ Á¤ÀÇÀÇ Å×À̺íÀ» ÀúÀåÇÏ´Â °ÍÀÔ´Ï´Ù. SWF ÆÄÀϳ»ÀÇ ¸ðµç ÄÚµå´Â, ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀγ»¿¡ Á¸ÀçÇϵµ·Ï(µíÀÌ) Á¤Àǵ˴ϴÙ. ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀº, °°Àº º¸¾È µµ¸ÞÀγ»¿¡ ÀÖ´Â º¹¼öÀÇ Å¬·¡½º¸¦ ºÐ¸®Çϱâ À§Çؼ­ »ç¿ëÇÕ´Ï´Ù. ±×°Í¿¡ ÀÇÇØ, 1 °³ÀÇ Å¬·¡½º¿¡ µµÂøÇØ º¹¼öÀÇ Á¤ÀǸ¦ ÁغñÇÏ´Â °ÍÀ̳ª, ¾ÆÀ̰¡ ºÎ¸ðÀÇ Á¤ÀǸ¦ ÀçÀÌ¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µË´Ï´Ù.

ActionScript 3.0 À¸·Î ÀÛ¼ºµÈ ¿ÜºÎ SWF ÆÄÀÏÀ» Loader class API ·Î ·ÎµåÇÒ ¶§´Â, ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ActionScript 1.0 ¶Ç´Â ActionScript 2.0 À¸·Î ÀÛ¼ºµÈ SWF ÆÄÀÏÀÇ À̹ÌÁö¸¦ ·ÎµåÇÒ ¶§´Â, ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ·Îµå µÈ Ŭ·¡½º¿¡ Æ÷ÇÔÇÒ ¼ö ÀÖ¾î ¸ðµç ActionScript 3.0 Á¤ÀÇ´Â, ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀγ»¿¡ Æ÷ÇԵ˴ϴÙ. SWF ÆÄÀÏÀ» ·ÎµåÇÒ ¶§, LoaderContext ¿ÀºêÁ§Æ®ÀÇ applicationDomain ÆÄ¶ó¹ÌÅ͸¦ ApplicationDomain.currentDomain ·Î ¼³Á¤ÇÏ´Â °ÍÀ¸·Î½á, ÆÄÀÏÀ» Loader ¿ÀºêÁ§Æ®¿Í °°Àº ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀο¡ Æ÷ÇÔÇϵµ·Ï(µíÀÌ) ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ·Îµå µÈ SWF ÆÄÀÏÀ» °°Àº ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀο¡ µÎ¸é, ±× Ŭ·¡½º¿¡ Á÷Á¢ ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº, °ü·ÃÇϴ Ŭ·¡½º¸í¿¡ ÀÇÇØ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Â ¹Ìµð¾î°¡ Æ÷ÇÔµÈ SWF ÆÄÀÏÀ» ·ÎµåÇÏ´Â °æ¿ì³ª, ·Îµå µÈ SWF ÆÄÀÏÀÇ ¸Þ¼Òµå¿¡ ¾×¼¼½º ÇÏ´Â °æ¿ì¿¡ Æí¸®ÇÕ´Ï´Ù. ´ÙÀ½¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

package {
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events. *;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;

    public class ApplicationDomainExample extends Sprite {
        private var ldr:Loader;
        public function ApplicationDomainExample() {
            ldr = new Loader();
            var req:URLRequest = new URLRequest("Greeter.swf");
            var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
            ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            ldr.load(req, ldrContext);    
        }
        private function completeHandler(event:Event) :void {
            ApplicationDomain.currentDomain.getDefinition("Greeter");
            var myGreeter:Greeter = Greeter(event.target.content);
            var message:String = myGreeter.welcome("Tommy");
            trace(message); // Hello, Tommy
        }
    }
}

±× À̿ܿ¡, ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» Á¶ÀÛÇÒ °æ¿ì¿¡ ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº, ´ÙÀ½°ú °°½À´Ï´Ù.

´ÙÀ½ÀÇ ±×¸²¿¡ ³ªÅ¸³»´Â ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â, ´Ù¾çÇÑ SWF ÆÄÀϷκÎÅÍ domain1.com ¶ó°í ÇÏ´Â ´ÜÀÏÀÇ µµ¸ÞÀγ»¿¡ ÄÁÅÙÃ÷¸¦ ·ÎµåÇϰí ÀÖ½À´Ï´Ù. ·ÎµåÇÏ´Â ÄÁÅÙÃ÷¿¡ µû¶ó¼­´Â, ´Ù¸¥ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¾îÇø®ÄÉÀ̼ǿ¡ Æ÷ÇԵǴ °³°³ÀÇ SWF ÆÄÀÏ¿¡¼­´Â, °¢°¢ ÀûÇÕÇÑ ´Ù¸¥ ÇüÅ·Π¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. °¢ ÇüÅÂÀÇ ±¸ºÐÇÏ¿© »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ÀÓÇØ¼­ ´ÙÀ½¿¡ ¼³¸íÇÕ´Ï´Ù.



¸ÞÀÎ ¾îÇø®ÄÉÀÌ¼Ç ÆÄÀÏÀº application1.swf ÀÔ´Ï´Ù. À̰Ϳ¡´Â, ´Ù¸¥ SWF ÆÄÀϷκÎÅÍ ÄÁÅÙÃ÷¸¦ ·ÎµåÇÏ´Â Loader ¿ÀºêÁ§Æ®°¡ µé¾î°¡ ÀÖ½À´Ï´Ù. ÀÌ ½Ã³ª¸®¿À¿¡¼­´Â, ÇöÀçÀÇ µµ¸ÞÀÎÀº Application domain 1 ÀÔ´Ï´Ù. »ç¿ë ÇüÅ A, »ç¿ë ÇüÅ B, ¹× »ç¿ë ÇüÅ C ´Â, ¾îÇø®ÄÉÀ̼dz»ÀÇ °¢ SWF ÆÄÀÏ¿¡ ÀûÀýÇÑ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» ¼³Á¤ÇÏ´Â ´Ù¾çÇÑ ¼ö¹ýÀÇ ¿¹¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

»ç¿ë ÇüÅ A:½Ã½ºÅÛ µµ¸ÞÀÎÀÇ ÀÚ½Ä (child) µµ¸ÞÀÎÀ» ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î½á, ÀÚ½Ä (child) SWF ÆÄÀÏÀ» ºÐ¸®ÇÕ´Ï´Ù. ±×¸²¿¡¼­´Â, ½Ã½ºÅÛ µµ¸ÞÀÎÀÇ ÀÚ½Ä (child) µµ¸ÞÀÎÀ¸·Î¼­ Application domain 2 ¸¦ ÀÛ¼ºÇÕ´Ï´Ù. "application2.swf" ÆÄÀÏÀ» Application domain 2 ³»¿¡ ·ÎµåÇϰí ÀÖ±â (À§ÇØ)¶§¹®¿¡, ÀÌ ÆÄÀÏ¿¡ Æ÷ÇԵǴ class Á¤ÀÇ´Â "application1.swf" ÀÇ class Á¤ÀÇ¿Í ºÐ¸®µË´Ï´Ù.

ÀÌ ÇüÅÂÀÇ ¿ëµµ·Î¼­´Â, ³°Àº ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇØ °°Àº ¾îÇø®ÄÉÀ̼ÇÀÇ ½Å¹öÁ¯À» µ¿ÀûÀ¸·Î ·ÎµåÇÏ´Â °æ¿ì¿¡ °æÇÕÀÇ ¹ß»ýÀ» ¸·´Â °ÍÀ» »ý°¢µË´Ï´Ù. ´Ù¸¥ ¹öÁ¯À» ´Ù¸¥ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎ ·Î ºÐ¸®Çϸé, °¢°¢ µÎ¾î °°Àº Ŭ·¡½º¸íÀ» »ç¿ëÇϰí À־ °æÇÕÀÌ ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù.

´ÙÀ½ÀÇ Äڵ忡¼­´Â, ½Ã½ºÅÛ µµ¸ÞÀÎÀÇ ÀÚ½Ä (child) µµ¸ÞÀÎÀ¸·Î¼­ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ» ÀÛ¼ºÇÕ´Ï´Ù.

request.url = "application2.swf";
request.applicationDomain = new ApplicationDomain();

»ç¿ë ÇüÅ B:ÇöÀçÀÇ class Á¤ÀÇ¿¡ »õ·Î¿î class Á¤ÀǸ¦ Ãß°¡ÇÕ´Ï´Ù. ±×¸²¿¡¼­´Â, "module1.swf" ¿¡ ´ëÇÑ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ¸·Î¼­ ÇöÀçÀÇ µµ¸ÞÀÎ (Application domain 1)À» ¼³Á¤ÇØ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì, ¾îÇø®ÄÉÀ̼ǿ¡ ÇöÀç Æ÷ÇԵǾî ÀÖ´Â °¢Á¾ÀÇ class Á¤ÀÇ¿¡, »õ·Î¿î class Á¤ÀǸ¦ ´õÇÏ°Ô µË´Ï´Ù. ÀÌ ÇüÅ´Â, ¸ÞÀÎ ¾îÇø®ÄÉÀ̼ÇÀÇ ·±Å¸ÀÓ °øÀ¯ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ·Îµå µÈ SWF ´Â, ¸®¸ðÆ® °øÀ¯ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® (RSL)·Î¼­ ´Ù·ç¾îÁý´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛÇϱâ Àü¿¡ ÇÁ¸®·Î´Ù¿¡ ÀÇÇØ RSL ¸¦ ·ÎµåÇÏ·Á¸é , ÀÌ Å×Å©´ÐÀ» »ç¿ëÇÕ´Ï´Ù.

´ÙÀ½ÀÇ Äڵ忡¼­´Â, ÇöÀçÀÇ µµ¸ÞÀÎÀ» ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ¸·Î¼­ ¼³Á¤ÇÕ´Ï´Ù.

request.url = "module1.swf";
request.digest = ". ";
request.applicationDomain = ApplicationDomain.currentDomain;

»ç¿ë ÇüÅ C:ÇöÀçÀÇ µµ¸ÞÀÎÀÇ ÀÚ½Ä (child) µµ¸ÞÀÎÀ» »õ·Ó°Ô ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î½á, ºÎ¸ðÀÇ class Á¤ÀǸ¦ »ç¿ëÇÕ´Ï´Ù. ±×¸²¿¡¼­´Â, "module3.swf" ¿¡ ´ëÇÑ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎÀ¸·Î¼­ ÇöÀçÀÇ µµ¸ÞÀÎÀÇ ÀÚ½Ä (child) µµ¸ÞÀÎÀ» ¼³Á¤Çϰí ÀÖ¾î, ÀÚ½Ä (child) µµ¸ÞÀο¡¼­´Â, Ä£µµ¸ÞÀο¡ Æ÷ÇԵǴ ¸ðµç class Á¤ÀǸ¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ÇüÅÂÀÇ ¿ëµµ·Î¼­´Â, º¹¼ö È­¸éÀÇ RIA (È®ÀåµÈ ÀÎÅÍ³Ý ¾îÇø®ÄÉÀ̼Ç)¸¦ ±¸¼ºÇÏ´Â ¸ðµâÀ» ¸ÞÀÎ ¾îÇø®ÄÉÀ̼ÇÀÇ ¾ÆÀ̷μ­ ·ÎµåÇØ, ¸ÞÀÎ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î Á¤Àǵǰí ÀÖ´Â ÇüŸ¦ ¸ðµâ³»¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï(µíÀÌ) ÇÏ´Â °ÍÀ» »ý°¢µË´Ï´Ù. Ŭ·¡½º°¡ °»½ÅµÉ ¶§¿¡ ¹Ýµå½Ã ÈĹæ ȣȯ¼ºÀ» À¯ÁöÇϵµ·Ï(µíÀÌ) ÇØ, ¶Ç, ·Îµå µÇ´Â ¸ðµâº¸´Ù ¸ÞÀÎ ¾îÇø®ÄÉÀ̼ÇÀ» Ç×»ó »õ·Ó°Ô ÇØ µÎ¸é, ¸ÞÀÎ ¾îÇø®ÄÉÀ̼ǿ¡ Æ÷ÇԵǴ class Á¤ÀÇ´Â ¸ðµâ³»¿¡¼­µµ »ç¿ëµË´Ï´Ù. ¶Ç, ÀÌ¿Í °°ÀÌ ÇØ »õ·Î¿î ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀγ»¿¡ ·ÎµåÇÑ ¸ðµâÀº, ¾ð·ÎµåÇϸé, ¸ðµç class Á¤ÀǸ¦ °¡º£Áö ÄÝ·º¼ÇÀÇ ´ë»óÀ¸·Î ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù (´Ù¸¸, ÀÚ½Ä (child) SWF ¿¡ÀÇ ÂüÁ¶¸¦ È®½ÇÈ÷ ÆÄ±âÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù).

ÀÌ Å×Å©´Ð¿¡¼­´Â, ·ÎµåÇÏ´Â Ãø¿¡ ÀÖ´Â ½Ì±Û Åæ ¿ÀºêÁ§Æ®³ª Á¤Àû class ¸â¹ö¸¦, ·Îµå µÇ´Â ÃøÀÇ ¸ðµâ¿¡¼­µµ °øÀ¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½ÀÇ Äڵ忡¼­´Â, ÇöÀçÀÇ µµ¸ÞÀÎÀÇ ÀÚ½Ä (child) µµ¸ÞÀÎÀ» »õ·Ó°Ô ÀÛ¼ºÇÕ´Ï´Ù.

request.url = "module3.swf";
request.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);