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            
325617 Visitors up to today!
Today 117 hit, Yesterday 963 hit
/Development/Flex/AIR 관련글 보기 2007년 09월 05일 21시 08분

flex의 SDK를 보면 변수 또는 함수에 internal, public, private, protected 대신 mx_internal 접근권한자가 붙어 있는 것을 확인할 수 있을 것이다.

이것은 namespace이다.
즉, 이 namespace를 사용하는 모든 class에서는 접근이 가능하고 반대로 namespace를 사용하지 않는 class에서는 사용이 불가능하다.

flex에서 사용하는 namespace는 다음 3가지 경우에 사용된다.

  1. XML Object에서 namespace접두사와 namespace를 식별하는 URI를 관련짓는데 사용한다.
  2. 같은 이름의 함수명 또는 변수를 구분하는데 사용한다.
  3. 서로 다른 package에 위치한 class에서 변수 또는 함수를 참조하는데 사용한다. 이러한 경우 외부에 사용하는 것은 금지하기 위함이다.

1, 2번 항목에 대해서는 http://flexdocs.kr/docs/flex2/langref/Namespace.html 에 있는 예제를 참고하길 바란다.


여기서는 3번만 하나의 예시를 들어주도록 하겠다.

다른 package에 있는 클래스, 즉 com.jidolstar.comp1에 Comp1클래스와 com.jidolstar.comp2에 Comp2클래스가 있다고 가정하자.

위의 2개 Class는 다음과 같은 관계와 조건을 가진다.

  1. Comp1, Comp2 두 클래스는 다른 package에 있다.
  2. Comp2는 Comp1을 객체로 생성하여 Comp1에서 정의한 ns_var:String 변수를 참고할 수 있게 하고자 한다.
  3. Comp1를 Application에서 객체를 생성해서 Comp1의 변수인 ns_var를 참고할 수 없다.


위 조건을 만족하기 위한 접근자(public,private와 같은)를 무엇으로 해야할지 생각해보자.
첫번째, internal : 일단 두 Class가 다른 package에 있으므로 internal로 해서는 안된다.
두번째, private : ns_var를 private로 하면 Comp1 클래스에서만 참고할 수 있으므로 위 조건을 만족할 수 없다.
세번째, protected : 상속관계가 아니므로 protected를 사용하면 안된다.
네번째, public : ns_var를 Comp2외에 다른 곳에서 참고가 불가능하므로 public으로도 안된다.

헉.... 우리가 잘 알고 있는 internal, private, protected, public 모든 접근자로는 위의 조건을 만족시킬 수 없다.
이런 경우에 해결할 수 있는 방법이 바로 namespace이다.
따로 설명은 안하겠다. 다음 예제를 보고 이해했으면 한다. 사실 설명하기 귀찮아서 ㅡㅡ;
결과는 Debug모드에서 Console창에서 This is a namespace example 문자이 나오는 것이 전부이다. ^^


ex_internal.as (Language : java)
package com.jidolstar.core
{
    public namespace ex_internal = "http://jidolstar.com/2007/";
}


 

Comp1.as (Language : java)
package com.jidolstar.comp1
{
    import com.jidolstar.core.*;   
    use namespace ex_internal;
   
    public class Comp1
    {
        ex_internal var ns_var:String;
        public function Comp1()
        {
            ns_var = "This is a namespace example";
        }
    }
}


Comp2.as (Language : java)
package com.jidolstar.comp2
{
    import com.jidolstar.core.*;
    import com.jidolstar.comp1.Comp1;
    use namespace ex_internal;
   
    public class Comp2
    {
        private var comp1:Comp1;
        public function Comp2()
        {
            comp1 = new Comp1;
            trace(comp1.ns_var);
        }
    }
}



ExNameSpace.mxml (Language : xml)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import com.jidolstar.comp2.Comp2;
            import com.jidolstar.comp1.Comp1;
           
            public function init():void
            {
                var comp2:Comp2 = new Comp2;
                var comp1:Comp1 = new Comp1;
                //trace(comp1.ns_var); //->에러걸림, 왜냐하면 Comp1의 ns_var은 ex_internal 네임스페이스로 묶여있기 때문
            }
        ]]>

    </mx:Script>   
   
</mx:Application>
 

ExNamespace.zip

위의 예제 프로그램이다. 새프로젝트를 만들고 import하면 된다.


글쓴이 : 지돌스타(http://blog.jidolstar.com/219)
이 글의 관련글
Trackback Address :: http://blog.jidolstar.com/trackback/219
Tracked from 영원의 헤아림 | 2008년 06월 20일 13시 49분 | DEL
TitleWindow 입니다 ;) Flex에서 팝업용도로 많이 쓰는 TitleWindow이라는 클래스가 있습니다. TitleWindow의 구현코드를 보신 분은 아시겠지만 TitleWindow 에는 그렇게 많은 코드가 있지는 않습니다. (오히려 뭐가 이렇게 없어! 할 정도) 저도 상당히 의아했습니다. 주석을 빼면 정말 몇줄 안되는 코드였기 떄문이죠. 그 이유는 TitleWindow는 Panel을 상속해서 만들었는데 실제 TitleWindow에서 필요한..
BlogIcon vick | 2007년 09월 06일 15시 19분 | PERMALINK | EDIT/DEL | REPLY
헉~~ 나에겐 외국어 같은 문장들...
BlogIcon 지돌스타 | 2007년 09월 19일 16시 49분 | PERMALINK | EDIT/DEL
ㅋㅋㅋ
박스농사 | 2007년 09월 18일 15시 43분 | PERMALINK | EDIT/DEL | REPLY
서...설명좀...
BlogIcon 지돌스타 | 2007년 09월 19일 16시 49분 | PERMALINK | EDIT/DEL
코드를 상당히 단순화 해서 어렵더라도 조금만 보시면 이해하실 수 있을거예요~ ^^;
Name
Password
Homepage
Secret