태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
밤하늘의 실제별, 나도 가질 수 있다?!

Flex에서 Dynamic 클래스 상속받아 사용시 주의사항

2007/05/23 19:39

 

[공지]이미지나 링크가 깨졌다면 댓글 부탁드립니다.

제가 Array를 상속받아서 사용할 일이 있었습니다.
Array를 상속받아서 사용할 때 LiveDocs에서 제공하는 아래 문서를 참고하였습니다.

Advanced Topics : Extending the Array class

Array Class (Language : Flex)
public dynamic class Array
{
....
}


Array를 상속받은 TypedArray Class (Language : Flex)

public dynamic class TypedArray extends Array
{
    public function TypedArray(...args) {}
    AS3 override function concat(...args):Array {}
    AS3 override function push(...args):uint {}
    AS3 override function splice(...args) {}
    AS3 override function unshift(...args):uint {}
}


그런데 문제는 여기서 생긴 것이 아니였습니다. Array를 상속받은 TypeArray를 또 한번 상속할때였습니다.

TypedArray을 상속 받은 TypedArray2 Class (Language : Flex)
public class TypedArray2 extends TypedArray
{
....
}


이렇게 만든뒤 아래와 같은 코드를 만들면 에러가 납니다.

TypedArray2 사용하기 (Language : Flex)
var typedArray2:TypedArray2  = new TypedArray2();
typedArray2.push(1);
typedArray2.push(2);
trace(typedArray2.length);
trace(typedArray2[0]); //<-- 여기서 에러!
trace(typedArray2[1]);


반면 아래 코드는 에러를 발생하지 않습니다.

TypeArray 사용하기 (Language : Flex)
var typedArray:TypedArray  = new TypedArray();
typedArray.push(1);
typedArray.push(2);
trace(typedArray.length);
trace(typedArray[0]); //<-- 에러 발생 안함!
trace(typedArray[1]);


디버깅을 해봐도 전혀 문제 없어 보였습니다.
어디 돌아다녀봐도 이상이 없는 것 같은 그런 코드... 디버깅해도 알 수 없는....
알고봤더니...
문제는 마지막으로 상속받은 TypedArray2 클래스가 dynamic이 아니였다는 겁니다.

즉, 이렇게 해야한다는 것이지요.

dynamic 으로 수정된 TypedArray2 class (Language : Flex)
public dynamic class TypedArray2 extends TypedArray
{
....
}


으아아아~~~!!!!
다들 알고 계셨던 것인가요? 머리가 아주 허해지는 느낌입니다.
Array Class 자체가 dynamic으로 만들었기 때문에 상속받는 모든 클래스도 dynamic으로 만들어야 문제가 없는 거였습니다.

Flex는 왜 dynamic이 있는 걸까요? 별로 필요 없어보이는데... 흑....



작성자 : 지돌스타(http://jidolstar.com)
크리에이티브 커먼즈 라이선스
Creative Commons License

Adobe Flash Platform , , ,

Trackback 주소: http://blog.jidolstar.com/trackback/85
  1. 아, 그렇군요.잘 보고 갑니다.

  2. 반갑습니다.