BLOG main image
Category (342)
MySpace (89)
Astronomy (50)
Development (178)
Drum (25)
linux에서 subversion설정
누리에 없을 자그마한 자국
살라딘의 생각
saladin's me2DAY
3D Avata - BuddyPoke
기찬 개발이야기
[FLEX] ANT로 ASDOC 사용하기
THLIFE.net
Flash10 대응 Textcube 1.7.5.1..
텍스트큐브 공지사항
«   2008년 11월   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
325645 Visitors up to today!
Today 145 hit, Yesterday 963 hit
/Development/Flex/AIR 관련글 보기 2008년 07월 01일 14시 02분

1. Application Domain 사용 예제

지난 호에서 우리는 Application domain에 대해서 알아보았다. 지금까지 설명한 내용을 확인하기 위해 몇가지 예제를 만들고자 한다.

 

[그림 1] 메인과 모듈에서 정의되어 있는 Sprite 클래스

 

[그림 1]은 메인 프로그램과 모듈 프로그램에 각각 정의되어 있는 Sprite를 확장한 클래스를 보여주고 있다. 메인은 Yellow, Blue를 가지며 둥근 모양이다. 모듈은 Blue, Red, Green을 가지며 사각형 모양이다. 서로 클래스 명이 중복되는 것은 Blue이다.

 

메인과 모듈에서 모두 아래와 같은 형태로 4개의 Sprite를 확장한 클래스의 정의를 참조한다.

 

var ClassRef:Class =

ApplicationDomain.currentDomain.getDefinition("클래스명") as Class;

 

클래스 참조값을 이용해 인스턴스를 생성하여 메인과 모듈에서 그림을 그려준다. 모듈을 불러올 때 메인 프로그램의 Application domain의 설정에 따라 메인과 모듈에 정의된 Sprite 클래스들을 참조 권한이 달라지게 될 것이다.

아래 코드는 모듈 프로그램에서 정의된 BlueSprite 클래스의 정의다. draw() 함수를 호출하면 30×30의 파란색 사각형을 그려준다.

 

//BlueSprite.as – 모듈 프로그램에서 정의됨

package com.jidolstar.blue

{

        import flash.display.Sprite;

 

        public class BlueSprite extends Sprite

        {

               public function BlueSprite()

               {

                       super();

               }

              

               public function draw():void

               {

                       graphics.clear();

                       graphics.beginFill(0x0000ff, 1);

                       graphics.drawRect(0,0,30,30);

                       graphics.endFill();

               }

        }

}

 

 

아래 코드는 메인 프로그램에서 정의되는 BlueSprite이다. 모듈에서의 정의와 달리 draw()함수를 호출하면 파란색 원을 그려준다. 메인과 모듈에서 정의한 이름(BlueSprite)은 같지만 그 기능은 다르다는 것을 기억하자.

 

//BlueSprite.as – 메인 프로그램에서 정의됨

package com.jidolstar.blue

{

        import flash.display.Sprite;

 

        public class BlueSprite extends Sprite

        {

               public function BlueSprite()

               {

                       super();

               }

              

               public function draw():void

               {

                       this.graphics.clear();

                       this.graphics.beginFill(0x0000ff, 1);

                       this.graphics.drawCircle(15,15,15);

                       this.graphics.endFill();

               }

        }

}

 

이처럼 메인과 모듈에 Sprite 확장 클래스를 만들어둔다.

모듈 프로그램은 다음처럼 작성된다.

 

//TestModule.as

package {

        import com.jidolstar.blue.BlueSprite;

        import com.jidolstar.green.GreenSprite;

        import com.jidolstar.red.RedSprite;

       

        import flash.display.Sprite;

        import flash.system.ApplicationDomain;

       

        public class TestModule extends Sprite

        {

               private var blue:BlueSprite;

               private var red:RedSprite;

               private var green:GreenSprite;

                             

               public function TestModule()

               {

                       super();

 

                       var BlueSpriteRef:Class;

                       var RedSpriteRef:Class;

                       var GreenSpriteRef:Class;

                       var YellowSpriteRef:Class;

                       var msg:String = "";

                       var sprite:*;

                       var x:int = 0;

                      

                       try

                       {

                              var ClassRef:Class = ApplicationDomain.currentDomain.getDefinition("클래스명") as Class;

                              BlueSpriteRef = ApplicationDomain.currentDomain.getDefinition("com.jidolstar.blue.BlueSprite") as Class;

                              sprite = new BlueSpriteRef;

                              sprite.x = x;

                              sprite.y = 10;

                              x += 40;

                              sprite.draw();

                              addChild( sprite );

                }

                catch (e:Error)

                {

                    msg+= "Module에서 com.jidolstar.blue.BlueSprite 로드 실패n"

                }

               

                       try

                       {

                              RedSpriteRef = ApplicationDomain.currentDomain.getDefinition("com.jidolstar.red.RedSprite") as Class;

                               sprite = new RedSpriteRef;

                              sprite.x = x;

                              sprite.y = 10;

                              x += 40;

                              sprite.draw();

                              addChild( sprite );

                }

                catch (e:Error)

                {

                    msg += "Module에서 com.jidolstar.red.RedSprite 로드