보통 객체의 클래스를 체크하기 위해선

아래와 같이 합니다.

var obj: Sprite = new Sprite();

trace( obj is Sprite );     // true;

is 연산자가 참 편하죠.

타이핑도 쉽고 길이도 짧고 ㅎㅎ

자 그럼 문제!!

만약 Sprite 인스턴스와 MovieClip 인스턴스가 있다고 예를 들어봅시다.

이 상황에서 여러분은 Sprite만 검출해 낼 수 있습니까?

아마 아래와 같은 코드를 떠올릴지도 모릅니다.

var obj1: Sprite = new Sprite();
var obj2: MovieClip = new MovieClip();

trace( obj1 is Sprite );
trace( obj2 is Sprite );

하지만 안타깝게도 결과는 둘 다 true 입니다.

"is" 비교 연산자는 상위 클래스까지 검사해주기 때문이죠.

MovieClip은 Sprite의 하위 클래스이기 때문에 MovieClip is Sprite 는 true가 되버리는것이죠.



그러면 진짜 딱 내 클래스만 체크하기 위해선 어떻게 해야할까요?

우리 센스쟁이 선배님들께서는 이미 그런것을 알고 계셨던가 봅니다.

하지만 남용하지는 말라는 듯이 숨겨놓았습니다.

바로 Object.constructor 속성입니다.

Object.constructor는 이름에서 알 수 있듯이 생성자를 참조하는 속성입니다.

객체에서 생성자를 참조 할 수 있도록 해주는 것이지요.

이것을 활용하면 재밌는것들을 많이 할 수 있습니다.

하지만 이 속성은 하위 클래스로 내려가면서 접근할 수 없도록 되어 있습니다.

무슨 이야기냐면

var obj: Object = new Object();
trace( obj.constructor );     // [class Object]

이렇게 접근하면 무사히 잘 나타나지만

var obj: Sprite = new Sprite();
trace( obj.constructor );     // Error #1119

이와 같이 다른 하위 클래스들한테서는 접근할 수 없게 되어 있습니다.

없는 속성에 접근할때 발생하는 1119 Error 가 발생하는군요.

하지만 저 속성은 "함부로" 접근할 수 없게 되어 있는것이지

절대로 접근하지 못하는것은 아닙니다.

바로 Object형으로 type-casting 을 시킨후 접근하면 된다 이말이죠~!!

var obj: Sprite = new Sprite();
trace( Object( obj ).constructor );     // [class Sprite]

Object( obj )로 type-casting을 하니까 잘만되는군요!!

그렇다면 위에서 풀지 못한 문제를 풀어봅시다.

var obj1: Sprite = new Sprite();
var obj2: MovieClip = new MovieClip();

trace( Object( obj1 ).constructor == Sprite );     // true
trace( Object( obj2 ).constructor == Sprite );     // false

오옷!!

Sprite 객체만 잡아냈습니다!!

생성자를 직접 끄집어내서 비교하기 때문에 내가 원하는 특정한 클래스로 딱 꼬집어서 검사할 수 있는 것이죠.

static public function getClassFromInstance( obj: Object ): Class
{
     var type: Class = obj.constructor;
    
     return type;
}

유틸 클래스를 하나 만들어놓고 위 함수를 만들어서 쓰면 앞으로 참 편리하겠죠?

아... 말해주고 싶다!!
말해주고 싶은게 있으신분은 참지말고 리플로 꼭 달아주세요. (사진 제목 : "말해주고 싶다..." )


  1. 박스농사 2008.09.01 10:58

    밥먹고 좋은글 감상+_+

  2. ㅎㅎ 2008.09.01 11:35

    상의를 앞뒤 거꾸로 ㅋㅋ

  3. Favicon of https://blog.flashplatform.kr 검쉰 2008.09.01 13:35 신고

    간밤에 덧글을 단거 같은데 없어졌네요 .ㅎㅎㅎ
    어디로 갔나~ ㅎ

  4. Favicon of http://blog.naver.com/zzaie 차차 2008.09.01 15:25

    좋은정보 감사해요..제 블로그에 내용좀 담아갈께요~~허락해 주세여

    • Favicon of https://wooyaggo.tistory.com 우야꼬  2008.09.01 16:21 신고

      라이센스만 따라주시면 마음껏 퍼가셔도 되용 ㅎㅎ

      - 저작자 표시
      - 상업적 이용 금지
      - 컨텐츠 변경시 동일한 라이센스 적용

      입니당^^

  5. 금도리 2008.09.09 17:31

    ㅎㅎ 말해주고싶다..ㅋㅋ

  6. 쫑쫑쫑 2008.10.08 02:31

    아~ ㅋ 이런 기발한 방법이 ㅋㅋㅋ
    좋은 정보 감사합니다. ^^

+ Recent posts