메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

액션스크립트 2.0 미리보기(2)

한빛미디어

|

2005-05-09

|

by HANBIT

13,088

출처: 콜린 무크의 Flash ActionScript 2.0 (콜린 무크 저 / 양주일 역) Chapter 1 중에서



플래시 플레이어와 액션스크립트 1.0/2.0

액션스크립트 1.0은 ECMAScript 3 표준을 따르고 있다(자바스크립트 1.5 규칙과 동일). 반면 액션스크립트 2.0은 ECMAScript 4 표준을 기초로 한다(자바스크립트 2.0의 이론적 근거). 저자 서문의 “액션스크립트 2.0 vs 액션스크립트 1.0” 부분에서 살펴보았지만 이러한 표준안의 유사함 때문에 두 가지 버전은 서로 비슷한 점을 갖는다. 그것은 반복문, 조건문, 연산자들과 같은 비객체지향 제작 문법을 동일하게 사용한다는 것이다.

액션스크립트 2.0이 최근 가장 선호하는 제작 방법이기는 하지만, 플래시 플레이어 7에서는 여전히 액션스크립트 1.0 문법을 모두 사용할 수 있으며 아주 잘 작동한다. 플래시 MX 2004 또는 플래시 MX 프로페셔널 2004에서는 액션스크립트 1.0과 2.0을 모두 지원한다(그러나 플래시 MX에서는 액션스크립트 2.0을 사용할 수 없다). 약간의 예외사항(자세한 것은 다음 과정에서 살펴볼 것이다)이 있지만 액션스크립트 2.0으로 제작된 코드를 플래시 플레이어 6에서 사용할 수도 있다. 그러나 액션스크립트 2.0으로 제작한 것을 아주 오래된 버전인 플래시 플레이어 4 또는 5에서 실행할 수는 없다.

만일 여러분이 액션스크립트 1.0에 익숙한 프로그래머라면 액션스크립트 2.0이 액션스크립트 1.0의 겉모양을 바꾼 것에 불과하다고 여길지도 모른다. 왜냐하면, 액션스크립트 2.0과 1.0은 swf에서 동일하게 바이트코드(bytecode)로 컴파일되며(액션스크립트 2.0에 조금 다른 조건이 있다), 플래시 플레이어에서 실행될 때는 액션스크립트 1.0과 액션스크립트 2.0 사이에 아무런 차이가 없다(앞에서도 이야기했듯이 약간 다른 점을 제외). 예를 들어, 액션스크립트 2.0으로 Rectangle과 같은 클래스를 제작했다면 swf 파일로 컴파일한 뒤 실행했을 때, 런타임에는 Function 오브젝트로 존재한다. 이것은 액션스크립트 1.0에서 클래스 생성자를 만들기 위해 함수를 선언하는 것과 동일하다. 또한 런타임에서 액션스크립트 2.0으로 만든 Rectangle 클래스의 인스턴스 r이 있다면 Rectangle.prototype을 참조하기 위한 __proto__ 속성이 존재하게 된다. 따라서 플래시 플레이어에서는 액션스크립트 1.0을 사용한 것과 동일하게 인식하게 되는 것이다.

그러나 여러분은 컴파일러와 런타임에 발생하는 보이지 않는 상황에 대해서 걱정할 필요가 없다. 만일 여러분이 액션스크립트 2.0으로 옮겨가고 싶다면(필자는 그래야 한다고 주장한다!) 액션스크립트 1.0의 프로토타입 방식의 프로그램 제작법을 영원히 잊어버려도 된다. 실제로 런타임에서 오브젝트와 클래스에 대해 액션스크립트 1.0을 사용한 동적인 제어 방법들이 액션스크립트 2.0을 연습하는 데 나쁜 영향을 미치기도 한다. 그러나 미리 겁먹을 필요는 없다. 이 책에서 문제를 일으키는 액션스크립트 1.0의 제작 방식에 대해서 자세히 살펴볼 것이며, 이에 대해 액션스크립트 2.0으로 교체하는 방법들을 다룰 것이다.

액션스크립트 버전과 플레이어 버전 설정

플래시 MX 2004에서는 swf 파일(플래시 무비)을 생성하는 과정에서 어떤 플래시 플레이어 버전을 사용할지 여부를 선택할 수 있다. 이것은 플래시 무비를 보게 되는 사용자의 플래시 플레이어를 선택할 수 있다는 뜻은 아니다. 여러분은 플레이어의 버전을 확인하거나 사용자에게 실행 가능한 플레이어로 업그레이드할 것을 제안할 수는 있지만, 플래시 플레이어 설치는 어디까지나 사용자의 최종 선택이 있어야만 한다.

swf 파일의 버전을 설정하려면 File→Publish Settings→Flash→Version 메뉴를 선택한다. 대부분의 유저가 볼 수 있도록 하려면 swf 파일의 플래시 플레이어 버전을 최대한 낮게 설정하는 것이 좋다. 만일 사용자의 플래시 플레이어 버전이 여러분이 만든 swf 파일의 버전보다 낮다면 액션스크립트 코드는 실행되지 않으며, 사용자는 아무것도 볼 수 없다.

플래시 무비의 버전 설정과 관련 사항은 다음과 같다.

* 플래시 무비는 지정된 버전 또는 그 이상의 최신 버전에서 실행해야 한다. 만일 낮은 버전에서 실행하면 대부분의 액션스크립트 코드는 오동작하거나 전혀 실행되지 않는다.

* 플래시 무비는 기능상 몇 가지 개선점이 포함되어 플레이어가 업그레이드되더라도 최신 버전의 플래시 플레이어에서 모두 동작한다. 다시 말해, 최신의 플래시 플레이어는 구 버전의 swf 파일 형식을 모두 지원한다는 뜻이다. 가령, 플래시 플레이어 6 형식에서는 액션스크립트 코드에서 대소문자를 구별하지 않는데, 이 swf 파일을 플레이어 7에서 재생하면 아주 잘 동작한다. 이것은 플래시 플레이어 7형식이 대소문자를 구분하지만 이전 버전의 파일 포맷에 대해서는 재생이 가능하다는 의미이다. 그러나 단 한 가지 호환되지 않는 규칙이 있다. 보안을 위해 크로스도메인 정책을 사용하는 경우 플래시 플레이어 7에서 플래시 플레이어 6 형식의 파일을 재생하더라도 최신의 보안사항을 준수해야 한다. 자세한 내용은 http://moock. org/asdg/technotes/crossDomainPolicyFiles 웹 문서를 참고하기 바란다.

[ 참고 ]
이 책에서는 액션스크립트 2.0 버전으로 swf 파일을 생성하는 것으로 간주한다.

플래시 MX 2004와 플래시 MX 프로페셔널 2004에서 플래시 플레이어 6 또는 플래시 플레이어 7 형식의 파일을 제작할 때 액션스크립트 1.0이나 액션스크립트 2.0 중 어떠한 코드형식을 사용할 것인가를 선택해야 한다. 중요한 점은 이러한 액션스크립트 버전의 선택은 개발 초기에 지정해야 한다. 만일 그렇지 않으면 최종 단계에서 코드를 다시 제작해야 하는 번거로움이 발생할 수 있다. swf 파일에서 액션스크립트 버전의 선택은 File→Publish Settings→Flash→ActionScript Version 메뉴를 사용한다.

액션스크립트 1.0으로 제작하면 다음과 같은 변화에 주의해야 한다.

* 액션스크립트 2.0 문법을 사용할 수 없다. 또한 데이터타입을 체크(후위 콜론 방식)하거나 오류 처리와 같은 액션스크립트 2.0의 주요 기능을 사용할 수 없다. 이 경우 플래시 플레이어 6 형식일 때에는 컴파일 오류가 발생하며 플래시 플레이어 7 형식에서는 아무런 오류가 발생하지는 않지만 동작하지 않는다.

* 플래시 4 버전에서 사용하던 ‘슬래시 문법’을 사용할 수 있다(그러나 추천할만한 좋은 방법은 아니므로 사용하지 않기를 바란다).

* 액션스크립트 2.0에서 사용하는 class, interface, public과 같은 예약어들을 변수나 함수의 이름으로 사용할 수 있다(그러나 이들은 업데이트를 위해 필요한 키워드이므로 사용하지 않을 것을 권장한다).

다음과 같은 액션스크립트 2.0의 런타임 기능들은 플래시 플레이어 6 형식으로 제작된 swf 파일에서는 사용할 수 없다. 이것은 어떠한 플래시 플레이어를 사용하더라도 동작하지 않는다.

* 예외 처리(10장 참고)

* 대소문자 구별(플래시 플레이어 6 형식의 swf 파일은 플래시 플레이어 7에서 재생되더라도 대소문자를 구분하지 않는다. 그러나 액션스크립트 1.0을 사용한 플래시 플레이어 7 형식의 파일은 플래시 플레이어 7에서 재생될 때 대소문자 구분 규칙이 엄격하게 적용된다. [표 1-2] 참고)

* 타입 캐스팅(3장 “런타임 캐스팅 지원” 참고)

[표 1-2]는 swf 파일을 재생하는 플래시 플레이어에 따른 대소문자 구분에 대한 비교이다. 런타임 환경에서 대소문자의 구분은 액션스크립트 언어의 버전과 무관하며 플래시 플레이어와 swf 파일의 형식에 따라서 좌우된다. 다시 말해, 액션스크립트 1.0 또는 2.0으로 제작된 무비는 플래시 플레이어 7 형식으로 swf 파일을 생성한 다음 플래시 플레이어 7에서 재생될 때만 대소문자 구분 규칙이 적용된다. 이 밖에 다른 경우는 [표 1-2] 하단에 표시된 상황을 제외하고 모두 대소문자를 구분하지 않는다. 플래시 플레이어 6과 대소문자 구분 규칙에 대해서는 나의 책 『ActionScript for Flash MX: The Definitive Guide 2nd Ed.』(O’Reilly, 2002)를 참고하기 바란다.



플래시 플레이어 7 버전에서 액션스크립트 1.0의 사용

플래시 플레이어 7 형식의 swf 파일을 플래시 플레이어 7에서 재생하는 경우 액션스크립트 1.0으로 제작된 코드는 플래시 플레이어 6에서 재생하는 것과 다르게 동작하는 경우가 있다. 이러한 차이는 플래시 플레이어 7에서 ECMAScript 3과 호환성을 지원하는 데에서 발생한 것이다. 이에 대해 살펴보면 다음과 같다.

* undefined의 값은 숫자 타입 데이터를 사용하는 경우 NaN으로 변환되고 문자열 데이터에서는 “undefined”란 문자열로 저장된다(플래시 플레이어 6에서는 undefined가 숫자 타입 데이터에서 0으로 문자열 데이터에서는 텅 빈 문자열 “”로 변환된다).

* 문자열이 저장된 변수는 논리형 데이터로 true가 된다(플래시 플레이어 6에서는 “0”이란 문자열이 사용되면 false, 그렇지 않은 경우는 true가 된다).

* 식별자(함수명, 변수명, 속성명 등)는 대소문자를 구분한다. 예를 들어, firstName과 firstname은 플래시 플레이어 7에서 서로 다른 참조를 가지는 변수명에 해당한다. 그러나 플래시 플레이어 6에서는 동일한 변수를 가리키는 식별자로 사용된다(그러나 일반적으로 프레임 레이블, 심볼의 링키지 ID는 대소문자를 구분하지 않는다).

앞에서 언급한 주의 사항은 플래시 플레이어 7의 기능을 사용하기 위해서 플래시 플레이어 6 형식의 무비를 플래시 플레이어 7 형식의 무비 파일로 업데이트할 때 고려해야 하는 것들이다. 즉, 여러분이 제작한 무비를 업그레이드할 때 플래시 플레이어 7에서도 동일하게 동작하는지 테스트하면서 코드를 면밀히 검토해야 한다. 만일 플래시 플레이어 7의 기능이 필요하지 않다면 플래시 플레이어 6 형식의 파일을 그대로 사용해도 된다. 왜냐하면 플래시 플레이어 6 형식의 파일은 플래시 플레이어 7에서 거의 대부분 동일하게 동작하기 때문이다. 이에 대한 설명은 앞에서 여러 번 언급했으므로 더 이상은 강조하지 않을 것이다.

[ 참고 ]
매크로미디어 사는 구 버전의 swf 파일로 제작된 무비의 재생을 보장하기 위해 많은 노력을 하였다. 예를 들어, 플래시 플레이어 6 형식의 파일은 플래시 플레이어 7과 같은 최신 버전의 플레이어에서도 완벽하게 재생된다. 그러나 플래시 플레이어 7 형식의 무비로 제작하는 경우 이전 swf 파일 형식과 차이점을 항상 인지하고 만들어야 한다. 이것은 재생하는 플래시 플레이어의 버전 차이 때문이 아니라 swf 파일 버전에 사용된 액션스크립트의 변화로 인해 발생하는 것이다.

당연한 말이지만, 플래시 플레이어 7 형식의 swf 파일은 새롭게 제작하는 경우(플래시 플레이어 6 형식의 파일을 업그레이드하는 경우가 아닌) 새로운 규칙을 적용해야 한다. 그러므로 항상 새로운 제작 방법을 염두에 두고 무비를 만들어야 한다. 새로운 문법 규칙들은 자바스크립트나 자바 언어 등, 다른 프로그램 언어로 제작된 프로그램 코드를 플래시 액션스크립트 언어로 손쉽게 변환할 수 있는 방법을 제공한다.

플래시 4의 슬래시 구문의 사용 제한

슬래시 구문(slash syntax)이라는 접근 방법은 플래시 4에서부터 최근 버전까지 사용되어 왔다. 예를 들어, 플래시 4에서는 무비클립 ball 안에 존재하는 변수 x에 접근하기 위해 다음과 같은 방법을 사용한다.
/ball:x

그러나 이러한 방식의 접근법은 액션스크립트 2.0에서 사용할 수 없으며, 플래시 플레이어 6 또는 7 형식의 파일로 생성하는 과정에서 다음과 같은 오류를 발생시킨다.
Unexpected "/" encounterd
TAG :
댓글 입력
자료실