본문 바로가기

프로그래밍

제네렉API 를 유연하게 만들기

반응형
얼마전 공개된 플래시 플레이어 10 API 에 포함된 Vector 에 대하여
자바의 제네릭스(Generics)와 비슷한 기능이다 라고 설명했었는데요.
이 제네릭스라는 것이 무척 심오한 부분이 많은 녀석인가 봅니다.

'자바 이론과 실습: 제네릭스 해부' 라는 제목으로 2개의 글이
최근 올라왔는데요.
'자바 이론과 실습' 은 Brian Goetz 가 연재하는 시리즈 이름인가 봅니다.
Brian Goetz 사이트는 아래 링크를 참고하세요. 참 심플한 디자인인데 콘텐츠는 무지 방대하네요.
http://www.briangoetz.com/



첫번째 이야기에서는 아래 문구처럼 와일드한 부분입니다.
제네릭의 사용법은 어렵지 않으므로, 머리 몇 번 긁적이면 그만이다. 그러나 제네릭에서 훨씬 더 난해한 부분이 있으니, 바로 와일드카드(wildcard)다
제네릭은 알려지지 않은 타입에 대해 클래스와 메서드의 동작에 대한 타입의 제약을 기술하기 위한 수단인데
와일드카드는 정확한 타입 제약을 모르는 상태에서도 제네릭 타입 변수에 대한 코드를 작성할 수 있다라는 점에서
모순되는 면이 아닌가 생각했습니다.
하지만 와일드카드는 복잡하게 하려는것보다는 제네렉API 를 유연하게 한다는데
그 목적이 있다고 합니다.

사용자 삽입 이미지

잘못 사용하면 와일드하게 코드가 변신한다는..



사실은 제네릭스에 대한 이해를 할까해서 본 기사인데
좀 난해하군요.
Vector 에서도 다음과 같이 상속관계에 있는 데이터 형식에 관한 유연한 대응을 제공한다고 합니다.
http://livedocs.adobe.com/flex/gumbo/langref/Vector.html
To convert a Vector with base type T to a Vector of a superclass of T, use the Vector() global function.

아래와 같은 형식일 경우 strict mode 에서 컴파일 에러가 발생하거나
런타임 에러가 발생하는데
  var v1:Vector.<Sprite> = new Vector.<Sprite>();
  v1[0] = new Sprite();
  var v2:Vector.<DisplayObject> = v1;

아래와 같이 처리하면 처리할 수 있다고 합니다.
  var v1:Vector.<Sprite> = new Vector.<Sprite>();
  v1[0] = new Sprite();
  var v2:Vector.<DisplayObject> = Vector.<DisplayObject>(v1);

사용하는 방법에 대하여는 아래 글을 참고하시구요.
- 아래 테스트에서는 다른 형식의 push 테스트에서 에러가 발생하지 않으셨다고 하는데
다른 분들도 한번 확인해보세요.

FDT 3.1 을 사용해서 player10 api 개발하기
http://docs.ssen.name/72
728x90