[출처] http://www.action-scripter.com/blog/1025

ActionScript 3.0 학습에 도움이 되는 팁

        



emmy_huang.jpg



Emmy Huang
Adobe

ActionScript 3.0은 Flash Player 런타임용의 새로운 프로그래밍 모델을 대표하는 강력한 객체 지향 언어입니다. ActionScript 1.0 또는 2.0을 이미 사용해 본 개발자라면 ActionScript 3.0을 사용해 간단한 어플리케이션을 개발할 때 몇 가지 언어적인 차이점을 발견하게 될 것입니다.

참고: 자세한 내용은 Flex 2.0 Language Reference에서 ActionScript 2.0과 ActionScript 3.0의 차이점을 나타낸 목록을 참조하십시오.

아무런 문제없이 ActionScript 3.0으로 전환할 수 있도록 하기 위해 개발 과정에서 경험할 수 있는 일반적인 문제점과 팁을 다음과 같이 목록으로 만들어 보았습니다.

모든 변수, 매개 변수 및 반환 값의 유형을 선언합니다.
모든 변수, 매개 변수 및 반환 값의 유형을 선언하는 작업은 필수적인 것은 아니나 최적의 활용 방법으로 여겨지고 있습니다. 이 작업을 하게 되면 컴파일러를 통해 보다 유용한 오류 메시지가 제공됩니다. 또한 가상 시스템에서 사용자가 어떠한 유형을 사용하여 작업하고 있는지 미리 알게 되므로 런타임 성능이 향상됩니다. 이는 매우 중요하기 때문에 기본 경고 메시지로 만들어 놓았습니다.

액세스 지정자가 없는 선언은 이제 public이 아닌 package internal을 기본값으로 합니다.
선언에 대한 기본 액세스 지정자가 public이 아니라 internal 이라는 것은 코드가 아닌 정의가 포함된 패키지에만 정의가 표시됨을 의미합니다. 이는 Java와 같은 다른 언어에도 일관되게 적용됩니다. ActionScript 2.0에서 선언은 public을 기본값으로 하기 때문에, 이러한 변화는 일반적인 문제점이 될 것입니다. 그래서 선언에 액세스 지정자를 두어 개발자의 의도를 명확하게 표시하는 것이 좋습니다. 이러한 최적의 방법을 지원하기 위해 ActionScript 3.0 컴파일러는 액세스 지정자가 사용되지 않은 경우 경고 메시지를 표시합니다.

클래스가 기본적으로 봉인(seal)되므로, 런타임 시 동적으로 속성을 추가할 수 없습니다.
이제 클래스는 동적으로 사용하거나 봉인하여 사용할 수 있습니다. 동적 클래스는 런타임 시 동적 속성을 추가할 수 있는 한편 봉인된 클래스는 추가할 수 없습니다. 봉인된 클래스에는 동적 속성을 저장하는 데 필요한 내부 해시 테이블이 필요 없으므로 메모리를 절약할 수 있고 컴파일러는 보다 나은 오류 피드백을 제공할 수 있습니다. 선언 class Foo 는 봉인되어 있습니다. dynamic 클래스를 선언하려면 dynamic 키워드를 사용합니다(예: dynamic class Foo).

클래스 정의를 패키지에 넣으려면 package 선언을 사용합니다.
package 키워드는 ActionScript 3.0에서 새롭게 추가되었습니다.

- ActionScript 2.0 코드 : class mx.controls.Button { ... }

- ActionScript 3.0 코드 : package mx.controls { class Button { .. } }                

ActionScript 2.0에서와 마찬가지로 public 클래스는 클래스와 동일한 이름을 가진 파일에 위치해야 합니다. 한 파일에 여러 개의 클래스가 선언될 수 있지만 한 개의 클래스만이 public이 될 수 있고 그 이름은 파일 이름과 일치해야 합니다.

클래스에 대한 참조가 완전히 정규화되어 있어도 클래스를 가져옵니다.
MyPackage.MyClass 클래스를 사용하려면 다음과 같이 코드를 작성하여 이 클래스를 가져와야 합니다.

import MyPackage.MyClass;        

모든 참조가 완전히 정규화되어 있어도 MyPackage.MyClass 전체 이름을 사용하기 때문입니다. ActionScript 3.0에서 import 문은 또 다른 패키지에서 클래스 정의를 사용하려는 것임을 나타내는 반면, ActionScript 2.0에서는 대표 속성 이름을 생성하기 위해서만 사용되었습니다. ActionScript 3.0에서 전체 클래스 이름은 모호함을 방지하기 위해서만 사용되며 import 문을 대신해서 사용되지 않습니다.

또한 와일드카드(*) 문자를 사용해 패키지의 모든 정의를 가져올 수 있습니다.

import MyPackage.*;

코드에 어떤 정의를 사용하는지에 대한 모호함이 줄어들기 때문에, 개별적으로 정의를 가져오는 것이 최적의 방법으로 생각됩니다.

항상 메서드가 재정의되는 것으로 표시합니다.
override 키워드를 사용하면, 재정의된 메서드에 대해 잘못된 이름이나 메서드 서명을 지정하거나, 재정의된 메서드 이름이 변경되는 경우와 같이 메서드를 재정의할 때 발생하는 일반적인 문제점을 미연에 방지할 수 있습니다. 또한 코드를 보면 메서드가 재정의되고 있음을 명확히 알 수 있습니다. 한 메서드가 다른 메서드를 override 하는지 파악하기 때문에 컴파일러가 유용한 유효성 검사를 수행할 수 있습니다. ActionScript 3.0의 override 키워드는 C#의 override 키워드 영향을 받아 만들어졌습니다.

함수에 반환 유형을 선언합니다.
함수에 대한 반환 유형을 선언하는 것이 가장 좋습니다. 반환 유형을 생략하면 경고 메시지가 표시됩니다. 이는 유형을 안전하게 수행하기 위한 것으로, 실수로 반환 유형을 선언하지 않아 Object의 기본 반환 유형을 얻지 못하는 경우를 방지합니다. 함수가 어떤 값도 반환하지 않으면 void로 반환 유형을 선언합니다.

이제 위임 기능이 언어에 내장되어 있으므로 이벤트를 손쉽게 디스패치할 수 있습니다.
ActionScript 2.0에서 이벤트를 메서드로 보내려면 mx.utils.Delegate 클래스나 다른 방법을 사용해야 했습니다.

import mx.utils.Delegate;
myButton.addEventListener("click", Delegate.create(this, onClick));

반면, ActionScript 3.0에서는 메서드에 대한 참조에서 자동으로 추출된 객체 인스턴스를 기억합니다. 이를 메서드 클로저(method closure)라고 합니다. 다시 말해 이는 자동으로 위임하는 역할을 담당합니다. 그러므로 코드는 다음과 같이 간단하게 작성됩니다.

myButton.addEventListener("click", onClick);

이제 null 또는 undefined 참조를 참조 해제하면 예외가 발생합니다.
레거시 ActionScript에서 null 또는 undefined를 참조 해제하는 것은 무시되어 undefined로 평가되었습니다. 그러나 이제 이러한 경우 TypeError 예외가 발생합니다. 뜻밖으로 null 또는 undefined 참조 해제되어 알려지지 않은 오류 비헤이비어에 의존하는 코드를 유의하십시오. 새로운 예외 발생 비헤이비어는 ECMAScript 사양과 호환됩니다.

-verbose-stacktraces 및 -debug 옵션을 사용합니다.
명령줄 옵션 -verbose-stacktraces 와 -debug 를 컴파일하면 파일 이름과 줄 번호가 Flash Player 런타임 경고 메시지에 표시됩니다. 런타임 오류가 발생하면 대화 상자에는 오류에 대한 설명과 발생 출처에 대한 호출 스택 목록이 표시됩니다. -verbose-stacktraces 와 -debug 옵션을 사용해 코드의 오류 출처를 쉽게 찾을 수 있습니다.

바인딩 가능한 속성을 명시적으로 선언합니다.
속성은 기본적으로 더 이상 바인딩되지 않으므로 [Bindable] 메타데이터 태그를 사용하여 바인딩 가능한 것으로 선언해야 합니다.

Flash Player API는 패키지로 재구성되었습니다.
이전에는 Flash Player API의 클래스 및 함수가 모두 전역 클래스와 함수였습니다. 이제는 flash.display, flash.events, flash.ui 등과 같은 다양한 패키지가 있습니다. 예를 들어 무비 클립은 flash.display.MovieClip 이며 getTimer 및 setInterval 은 flash.utils 패키지로 옮겨졌습니다.

setInterval/setTimeout 대신 새로운 Timer 클래스를 사용합니다.
새로운 Timer 클래스는 setInterval 과 setTimeout 함수보다 timer 이벤트를 위한 더욱 깔끔한 방식을 제공합니다. 새로운 Timer 클래스는 내부 ID 번호를 처리하지 않아도 되고 보다 현대적이고 객체 지향 인터페이스를 가지고 있는 등 setInterval보다 많은 이점이 있습니다. setInterval 과 setTimeout 대신 Timer 를 사용하는 것이 가장 좋을 것으로 생각됩니다.

이벤트의 하위 클래스를 지정합니다.
이벤트는 이제 강력한 형식이기 때문에 새로운 Event 기본 클래스의 하위 클래스를 지정해야 합니다. 새로운 Event 클래스를 사용하면 이벤트 시스템이 보다 명확해지고 효율적으로 됩니다. 그러나 이는 또한 이벤트를 디스패치할 때 Object 클래스의 일반 인스턴스를 더 이상 사용할 수 없고 객체의 문자 대표 속성을 사용할 수 없다는 것을 의미합니다(예: {type: 'customEvent' }).

일반 Object 클래스를 생성하지 않고 Event 클래스를 사용해야 합니다(예: dispatchEvent(new Event ('myCustomEventType'))). 추가 속성을 전달하려면 Event 의 하위 클래스를 지정해야 합니다. Object 를 사용하지 않는 이유는 유형 안전과 효율성을 향상시키기 위함입니다.

시각적 요소는 DisplayObject를 확장하는 데, 다른 클래스와 마찬가지로 이 시각적 요소를 정의할 수 있습니다.
이제 구성 요소는 addChild를 사용하여 표시 목록에 동적으로 새로 생성되거나 추가됩니다. 이제는 createChild 를 사용하지 않습니다. TextField를 비롯한 시각적 엔터티는 다른 객체와 같이 인스턴스화될 수 있으며 addChild 또는 addChildAt를 사용하여 표시 목록에 간단히 추가될 수 있습니다. 즉, createEmptyMovieClip 과 createTextField와 같은 특정 API는 더 이상 사용되지 않음을 의미합니다. new TextField 를 생성하려면 createTextField 대신 new TextField 를 사용합니다.

E4X(ECMAScript for XML)는 이제 Flash에서 XML을 조작할 때 권장하는 방법입니다.
E4X는 레거시 Flash XML 클래스보다 더욱 강력하고 언어에 잘 통합되었으며, 새롭고 다양한 기능을 제공합니다. 레거시 Flash XML 클래스는 계속 사용할 수 있습니다. 레거시 XML API(XMLDocument로 명칭이 변경됨)를 사용하고 싶다면 flash.xml 패키지에서 제공되므로 사용할 수 있습니다.

E4X를 사용할 경우 toXMLString 메서드를 사용합니다.
toString 메서드를 사용하면 객체에 대한 완전한 XML 마크업을 반환하지 않아도 됩니다. 이를 위해 toXMLString 메서드를 사용합니다. toString 메서드는 XML 객체를 위한 편리한 문자열 값을 반환합니다. 그렇지만 XML 객체를 전체적으로 시리얼라이즈(serialize)할 필요는 없습니다. XML 마크업을 얻으려면 toXMLString 메서드를 호출합니다.

for...in 루프는 클래스에 의해 선언된 속성 및 메서드를 더 이상 열거하지 않습니다.
단지 객체의 동적 속성만을 열거합니다. ActionScript 3.0은 describeType이라는 객체 검사를 위한 더욱 발전된 새로운 방식을 제공합니다. ActionScript 3.0에서 객체를 검사할 때 이를 사용합니다.

SWF 파일의 루트 객체는 이제 원하는 사용자 정의 클래스의 인스턴스가 될 수 있습니다.
ActionScript 2.0에서 SWF 파일의 루트 객체는 항상 MovieClip 클래스의 루트 객체였습니다. 그러나 ActionScript 3.0에서는 Sprite의 하위 클래스일 수 있습니다. SWF 파일의 DocumentRoot 가 되도록 클래스 정의를 설정할 수 있습니다. SWF 파일이 로딩되면 루트 객체로 사용할 해당 클래스를 인스턴스화하게 됩니다.

본 기술문서를 위해 여러 유용한 정보를 제공해주신 개발자 커뮤니티에 특별한 감사를 드립니다. 여기에서 모든 관련 내용을 다루지는 않았지만 ActionScript 3.0을 처음 사용하여 작업하는 여러분에게 길잡이가 될 것입니다. 다른 객체 지향 언어에 익숙한 개발자라면 알고 있는 내용을 한번 확인하는 차원으로 넘길 수 있습니다. 다른 곳에서 익힌 기술은 ActionScript 3.0에 바로 적용할 수 있습니다.

객체 지향 프로그래밍이나 ActionScript 3.0이 생소한 분에게는 이 팁들이 유용한 정보가 되어 아주 귀중한 자료가 될 것입니다. 그럼 성공적으로 코딩을 완료하시길 바랍니다.
2006/12/05 15:14 2006/12/05 15:14

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

-->





본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수

등록된 글이 없습니다.

대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED