본문 바로가기

Actionscript3.0

왜 Actionscript 3.0을 사용해야만 하는가?

문서 원본 : AdobeRIA 기술문서


작성된 날짜 : 2009-02
저자 : 강동혁
저자 소개 : Daum communications에서 UI 개발 업무를 하고 있으며, Flash 커뮤니티에서 ‘동강’ 이라는 닉네임으로 활동 중이다. 뭐든지 사용하기 편해야 한다는 생각으로 개발을 하고 있으며, RIA와 HCI에 관심이 많다. 

Blog : www.ddongkang.com

목차
1. 서론 : 왜 Actionscript 3.0 인가? 

2. 본론 : Actionscript3.0을 배워야 하는 이유
  - 향상된 연산속도                          
  - 보다 엄격한 디버깅 기능
  - 크로스 스크립팅
  - OOP를 위한 지원
  - Flashplatform의 언어
  - Flash API와 Display 및 Event

3. 결론 : 다음 편 예고


 Actionscript 3.0 사용해야만 하는가?

 Actionscript 3.0(이하 AS3.0) 소개되고, Flash CS3 나와서 우리에게 정식으로  모습을보여   2 가까이 되었다. 이미 웹에는 AS3.0으로 만든 많은 결과물이 우리의 욕구를 충족해 주고 있다. 웹뿐만 아니라 AIR 이용한 데스크톱 애플리케이션과  밖에 여러 디바이스에서 AS3.0 기술을 느낄  있다. AS3.0 소개되고 나서, 많은 개발자와 디자이너는 코드의 유연함과 AVM2 강력함을 직접 체험하고 더욱  멋진 결과물을 만들  있는 무기를갖게 되었다. 반면에, 여러 가지 이유가 있지만 AS3.0 배우기를 꺼리거나, 어려워하는 사람이 많이 있음을 커뮤니티에서 느낄  있었다. 그래서  기술 문서는 AS3.0으로 Flash 플랫폼 개발을 시작하고 싶거나, AS2.0 사용하고 있지만 AS3.0 배우기를 원하는 디자이너와 개발자를 대상으로 하고, AS2.0 비해 달라진 점과, 강력해진 점을 중점적으로 다루고 Flash CS4 AS3.0 이야기할 것이다.

 

-   AS3.0인가?

 

 커뮤니티에 많이 올라오는   이런 질문이 있다.

Flash 시작하려고 하는데, AS1.0부터 순서대로 공부해야 하나요?

 무수히 많은 댓글이 달리고, 댓글 대부분은 AS3.0으로 시작해도 무방하다는 의견이다. 물론 나도  의견에 전적으로 동의한다. 물론 AS1.0 AS3.0까지 순서대로 공부하면, Actionscript 원리를 습득하고, AS3.0 배우는 것이라  수월해지기는 하겠지만, 시간 투자에 비해 얻는 것은 적다. 그리고 AS1.0, 2.0 비해 AS3.0 달라진 개념이 많아 AS2.0 주로 사용하는 디자이너나 개발자가 AS3.0으로 넘어오지 못하는 이유가 되기도 한다. AS3.0 배우라고 권장하는 사람들은 Java 공부를 하라고 권유하기도 한다.  이유가 AS3.0 컴파일하는 AVM2 JVM(Java Virtual Machine) 기반으로 하기 때문에, 문법 면에서 아주 비슷하다. 더구나 많은 양질의 Java 서적을 시중에서 쉽게 구해   있으니, 아직 국내에 뚜렷하게 AS3.0 대한 기초 개념서가 나오지 않은 상태에는 Java 서적을 보는  현명한 선택일지도 모른다. 물론 Java 대해  안다면 필요 없는 일이다.

AVM

Actionscript Virtual Machine(액션스크립트 가상 머신) Flash player 포함된 Actionscript 만들어진 SWF 재생하는 엔진이다. Java 실행되려면 JVM 있어야 하듯, Actionscript Java 실행되는 원리와 같다. Flash player(AVM) 설치되어 있다면 어느 디바이스라도 SWF 실행할  있다.


    Actionscript
에는 버전이 있다. 다른 언어에도 분명 버전은 존재하지만, 다른 언어에서보다Actionscript에서  부분을 중요하게 봐야 하는 이유는, AS1.0 2.0 같은 런타임(AVM1)에서 실행되지만 AS3.0 AVM2에서 실행되기 때문이다. 또한 AS2.0에서 AS3.0으로 넘어오면서 완전 다른 언어라고 착각할 정도로 문법 구조에서 많은 부분이 바뀌었다. 그래서 AS1.02.0 배우지 않아도 AS3.0    있다. AS3.0 공개된   2년이 지났지만, 아직 많은 사람이 AS1.0 2.0 사용 중이고  상에는 AS1.0, 2.0 시절에 만들어진 SWF 비율이  높은 비율을 차지하고 있다. 하지만  추세는 금방 뒤집어질 정도의 차이다.


 AS3.0 연산 속도가 이전 버전에 비해 최대   빨라졌다는 평가를 받는다. AS1.0 2.0 프로그래머에게 외면 아닌 외면을 받았던 이유도 C Java 비해 연산이 느렸기 때문이다. 하지만 AS3.0 들어와서는  문제가 어느 정도 해소되었다. 속도뿐만 아니라 더욱 강력한 Flash API 기능을 가지고 있다. 하지만  아직까지 AS2.0 사용하는 것일까?  물음에 대한 다양한 이슈가 존재한다.


1.
       
Flash player 호환성에 따른 문제

많은 사용자가 이용하는 서비스는, 모든 사람에게 똑같이 보여야 한다는 점이 최우선고려사항이다. AS3.0 재생할  있는 Flash player 9 보급률이 이미 98% 넘었지만, 아직 Flash player 8 설치된 나머지를 위해 AS2.0으로 작업하는 경우가 있다. 간단한 코딩이나 모션 작업 같은 경우에는 AVM2 컴파일했을  약간의 이익을   있겠지만 익숙하지 않은 AS3.0 사용으로 작업 능률이 떨어질 수도 있다는  단점이다.  보급률 문제는 점점 많은 사람이 Flash player 9 이상을 설치함에 따라 빠르게 해결될  있는 문제다. 

그림1. Flash player 보급률

2.       AS3.0을 다룰 수 있는 사람 부족

AS3.0이 나오고 난 직후에는 Flash 프로젝트에 AS3.0을 도입하길 꺼려했다결과물이 나와도 유지 보수할 인력이 없다는 이유였다하지만 2년이 지난 후 상황은 점점 나아지고 있다여러 책과 커뮤니티 기술 문서 덕에 AS3.0을 사용하는 사람도 많이 늘어났으며덩달아 상당수 프로젝트가 AS3.0으로 진행되고 있다.


3.       AS3.0은 어렵다

AS3.0은 분명 이전 버전보다시작하기 어렵다하지만 원리를 익히고 나면 이전 버전에 비해 휠씬 편리함을 느낄 수 있을 것이다왜 어렵게 느껴질까간단하게 컴퓨터에 있는 부품을 비유해 보겠다. AS2.0까지 객체를 다루고 구현하는 방법은 주로 이미 만들어진 기능을 사용하는 방식이었다예를 들어 이미 만들어져 있는 사운드 카드를 컴퓨터에 설치하는 것처럼, AS2.0는 많은 기능을 손 쉽게 가져다 쓸 수 있었다하지만 AS2.0에서 사운드 카드 자체를 만들 수는 없었다. AS2.0의 기본 기능들을 사운드 카드라 비유했다면 AS3.0의 기본 기능들은 사운드 카드 안에 들어 있는 각각의 부품이다(저항이나다이오드 같은 사운드 카드를 구성하는 부품들). 각각의 부품들로 이미 만들어져 있는 것이 아니라(AS3.0에서 제공되는 Flash API에서는 휠씬 많은 기능을 구현하여 제공한다), 자신만의 독창적인 것을 만들 수 있다. AS3.0을 시작하기 어려운 이유가 바로 여기에 있다부품 종류가 너무 많아 다 외워야 할 것 같은 느낌이 들기 때문이다하지만 뭐든 처음 시작할 때 가장 고생하는 법이다조금만 인내하면서 원리를 파악해 보자그럼 AS3.0이 어느 순간 다르게 보일 것이다 

AS2.0 사용자가 AS3.0으로 넘어오지 못하는(필요성을 느끼지 않아 AS2.0을 사용하는 것은 제외가장 큰 이유는 자신이 잘 하는 AS2.0으로는 간단히 만들 수 있는데문법도 제대로 알지 못하는 AS3.0으로 구현하기가 답답하고 힘들어서일 것이다이 글을 쓰는 나 자신도, AS2.0을 주로 사용하다 AS3.0을 사용했을 때 답답함을 많이 느꼈기 때문에 그 마음을 잘 안다하지만 조금만 고생한다면 몇 종류 안 되는 만들어진 기능이 아니라,마음대로 조절할 수 있는 자신만의 기능을 만드는 즐거움과 더욱 강력해진 Flash API(이미 구현되어 있어서제공되는 객체들)를 직접 느낄 수 있을 것이다.


 AS3.0의 좋은 점을 설명한다고 해서, AS1.0 2.0이 나쁘다는 말은 아니다그 자체로 충분히 좋은 언어다. AS3.0에 비해 구조가 더 직관적이고 이해하기 쉽다는 장점을 가지고 있다세계적인 Flash 아티스트인 Koshua Davis나 Erik Natzke도 작업을 할 때 AS1.0 2.0을 사용한다고 한다그만큼 비교적 쉽고구현이 간편하다하지만 AS3.0은 이러한 AS2.0의 장점을 다 커버하고도 남을 만한 장점을 가지고 있다지금부터  AS3.0  써야만 하는가? 대해 구체적으로 이야기  보겠다.

 

-AS3.0을 배워야 하는 이유

AS3.0이 완성도 있는 스펙으로 나온 계기는 Adobe Macromedia를 인수하면서 유능한 개발자가 많이 Flash 개발에 투입되었기 때문일 것이다. Flash 8 AS2.0 기반의 향상된 언어 스펙으로 런칭되고곧 바로 Adobe 개발자들은 Flash 9에 대한 준비를 하면서 AVM1 스펙으로 갈 수 없다고 생각하였다고 한다. AVM1 스펙으로는 사용자들에게 만족할 만한 속도와 메모리 관리를 제공하지 못하기 때문이었다그리고 결과적으로 AVM2라는 높은 성능을 내는 가상 머신을 만든다.


1.      향상된 연산 속도

기존 Flash 사용자들이 AS3.0이 나오고 난 뒤 가장 기뻐했던 것은 AS3.0의 속도가 놀라울 정도로 향상되었단 소식을 들었기 때문이다. Adobe AS3.0 도움말에는 속도 향상을 다음과 같이 기술하고 있다.

While Actionscript3.0 is not required for content that runs in Adobe Flash Player 9, it allows performance improvements that are available only with the new Actionscript Virtual Machine. Actionscript3.0 code can execute up to ten times faster than legacy Actionscript code

AS3.0만을 가지고 있는 코드(외부 데이터를 가지고 있지 않는 경우)를 실행할 경우 이전 버전에 비해 열 배의 속도 향상이 된다. Flash CS4에서의 AS2.0 AS3.0의 연산속도 비교는 그림 2와 같다.


그림2.

 

그림3 Flash CS4에서의 AS2.0(AVM1)과 AS3.0(AVM2) 수행 시간

 그림 2, 3을 보아 알 수 있듯이 같은 코드를 실행하였을 때, Flash CS4에서 AS2.0 AS3.0은 엄청난 수행 시간 차이가 났다위의 예제를 수십 번 반복했을 때도 결과는 같게 나왔다또한 수행 시간 격차를 줄일 의도로 for문의 수행 횟수를 1000에서 100000으로 올려 보았다. AVM2(AS3.0)에서는 제대로 수행되었지만 AVM1(AS2.0)에서는 그림 4와 같은 경고 팝업 메시지가 떴다.

그림 4 연산이 많은 코드를 실행했을 때 나타나는 경고 메시지

물론 코드와 컴퓨터 상태에 따라 수행 시간 차이는 줄어 들 수 있겠지만, AVM2가 AVM1에 비해 월등히 빠른 속도를 낸다는 것은 의심한 여지가 없는 사실이다또한 AVM2의 향상된 기능을 사용하려면 AS3.0을 사용해야 한다이러한 차이는 AS3.0이 내부적으로 새로운 바이트 코드 명령어를 도입해 객체 추적 시스템 개선자료구조 시스템 개선 작업을 함으로써 가능해졌다.

 

-         객체 추적 시스템 개선

AS2.0에서는 prototype을 사용하여이미 정의되어 있는 MovieClip이나 기타 객체들에 속성 메서드를 추가할 수 있었다코드를 짤 때 아무 곳이나, prototype을 사용하면 뭐든 기존 객체에 메서드를 추가할 수 있어 편리했다하지만 이렇게 동적으로 객체를 정의하는 방법은 굉장히 비효율적이었다. Flash player prototype을 사용했기 때문에 컴파일할 때 알아야 하는 객체 정보를 다시 추적해야 하는 문제가 있었다또한 AVM1에서는 prototype을 사용하든사용하지 않든 모든 객체의 정보 추적을 위한 테이블을 만들어 놓기 때문에 상당한 메모리를 쓰고 수행 속도를 떨어뜨리는 요인이 되기도 하였다그래서 AVM2에서는 기본적인 객체 선언은 정적(뒤에 다루는 봉인 클래스를 참고)으로 하게 했고객체를 선언할 때 dynamic 키워드를 사용해 동적으로 객체를 조작할 수 있는 기능을 남겨 두었다하지만 dynamic 키워드를 사용하는 것은 성능을 저하시키는 요인이 될 수 있다.

 

-         객체의 타입 선언

위에서 언급했듯이 AS2.0에서는 객체가 동적으로 생성되었기 때문에 객체의 타입 유형(런타임 유형)을 선언할 필요가 없었다. AS3.0에서 객체가 정적으로 생각되는 방식으로 바뀜에 따라 런타임 유형을 선언해줘야만 하고이렇게 객체 타입을 선언해 객체의 정보를 AVM에 미리 알려주는 방식은 시스템의 유형 안전성을 높이고메모리를 좀 더 효율적으로 관리하는 데 도움이 된다(AS2.0의 경우 내부적으로동적으로 만들어진 객체의 추적을 위한 메모리 테이블이 필요하다).


2.      더 엄격한 디버깅 기능

 AS3.0에서는 이전 버전보다 엄격한 디버깅 기능 및 런타임 오류 상황을 알려 준다. AS2.0을 사용하면 런타임 오류 상황을 알려주지 않는 경우가 많아서 어떤 이유인지 모르고 SWF가 다운되어 버리거나 메모리가 새는 경우가 있었다하지만 AS3.0의 더 엄격한 디버깅 기능은 어디에서 어떤 오류가 발생했는지 자세히 알려주므로 프로그램의 완성도를 높이는 데 기여하고 있다그리고 Flash player 9부터는 Debug 버전의 Flash player가 제공되어 브라우저에서 실행되는 SWF 파일의 에러를 실시간으로 확인할 수 있다.            


3.      크로스 스크립팅

 크로스 스크립팅이란, A.swf B.swf가 있을 경우 A에서 B를 로드한 후(B A 객체의 자식 객체가 된다) A에서 B.swf 파일의 변수객체속성메서드에 접근할 수 있는 기능을 말한다. AS3.0에서 크로스 스크립팅이 가능해지고 난 후에야 비로소 Flash 프로그래밍의 디자인 부분과 개발 부분을 확실하게 나눠서 처리할 수 있는 기반이 만들어졌다. Flash 콘텐츠를 만들기 위해 디자이너들은 여러 가지 도구를 이용하여 나온 작업 소스를 Flash로 객체화한 후 B.swf라는 파일을 Flash 개발자에게 넘겨 준다디자이너가 넘겨준 B.swf에는 디자이너가 작업한 무수히 많은 객체가 Flash CS3부터 제공된 ‘Linkage’라는 기능을 통해 객체화되어 있다. B.swf를 받은 개발자들은 디자이너들이 만들어 놓은 시안과 네이밍(객체의 이름즉 클래스 이름이다)대로 작업을 하면 된다디자인이 바뀌면 개발자가 fla 파일을 넘겨 줘야 한다거나포토샵으로 만든 디자인 파일을 fla 파일에 임포트할 필요 없이디자이너가 수정한 B.swf를 넘겨 주면 된다개발자들은 Loader로 B.swf를 로드한 후에 약간의 보안 처리만 해 준다면 손 쉽게 디자이너가 만든 객체를 불러와 사용할 수 있다이렇게 각각의 역할을 확실하게 구분해 줄 수 있게 도움을 주는 기능이 크로스 스크립팅 이다또한 중복 데이터 등 라이브러리의 관리 소홀로 인한 SWF의 용량 문제를 피하는 방법이기도 하다또한 따로 작업한 SWF를 하나의 부모 SWF로 로드하여자식 객체처럼 사용할 수 있는 방법을 제공한다.


그림 5. 크로스 스크립팅

 4.      객체 지향 프로그래밍(OOP)을 위한 지원


-  봉인 클래스

 AS3.0을 처음 접한 Java 개발자는 즐거웠을 것이다. Java와 굉장히 구조가 비슷하기 때문이다혹자는 AS3.0에 와서야 비로소 프로그램 언어다운 모습을 갖췄다고 말한다그 이유는 객체 지향 프로그래밍을 위한 다양한 지원을 하기 때문이다우선 AS3.0에서는 봉인 클래스 개념이 도입되었다. MovieClip으로 모든 것을 처리했던 AS2.0에서는 MovieClip이 동적으로 생성되기 때문에 이를 위한 메모리가 추가로 필요했다하지만 봉인 클래스 개념이 도입되면서 dynamic 클래스로 지정하지 않는 한 속성과 메서드를 동적으로 추가할 수 없었다하지만 이 덕에 불필요한 수정에 대해 객체를 보호하고덩달아 메모리 효율을 높일 수 있게 되었다.

- override

  override란 상위 클래스를 상속 받은 하위 클래스에서 상위 클래스의 함수를 변경하여 사용하는 것을 말한다그림 6에서, Parent를 상속 받은 Child override를 이용해 Parent init() 메서드를 재정의하고 있다이렇게 상속에 의한 확장을 할 때에 override를 이용하여 코드의 유연성을 더해주고객체 지향 프로그래밍을 도와 주는 기능이 AS3.0부터 도입됐다. 




그림 6. override  쓰임


-         Package


AS3.0에서는 클래스를 package 안에 정의하여 package로 클래스 경로를 지정한다이 경로는 클래스를 import로 로드할 때 위치 값으로 참조된다. Package 안에는 한 개 이상의 클래스가 존재할 수 없지만 package 밖에는 package 안에 있는 클래스 외의 클래스가 존재할 수 있다하지만 package 밖에 정의된 클래스는 외부에서 접근이 불가능하다그러므로 이러한 특성을 이용해 Singleton(디자인 패턴)을 구현하기도 한다.



5.       Flash, Flex, AIR  모든 Flash 플랫폼의 언어

 AS3.0 Flash Flex 그리고 AIR뿐만 아니라 앞으로 나올 모든 Flash 플랫폼의 기본이 되는 언어가  것이다최소한  언어를 기반으로 하여새롭게 업그레이드되어  것이다언어하나를 배워서 서너 가지를 동시에   있다는 것은 Flash 처음 배우는 사람이나 전부터Flash 플랫폼을 접해 왔던 사람이나욕심이 가는 장점 중에 장점일 것이다.


6.      강력한 Flash API, 달라진 Display 시각 표현 방법 및 이벤트

 AS3.0으로 풀어 낼 수 있는 Flash player API는 정말 다양해졌고이러한 객체들을 화면에 보여 주는 기능을 관장하는 Display 시각표현 방법이 바뀌었다또한 이벤트 핸들링 방식도 더욱 많은 것을 표현하고 조작할 수 있게 바뀌었다이 새로운 기능에 대한 것은 다음 편에 더욱 자세히 다루겠다.


글을 마치면서

지금까지 AS3.0 어떤 점이 달라졌고 이전 버전에 비해 업그레이드된 스펙이 우리에게 영향을 미칠  있는 좋은 점을 중심으로 이야기해 보았다분명 AS3.0 AS2.0 길들어진 사람에게는  나라 언어처럼 보일지도 모른다특히 AS2.0 현란하게 구사 하는 사람일수록 AS3.0 써야 하는 필요성을  느낄 것이다하지만, Flash 도구가 간단한 애니메이션을 만들  있는 도구에서 애플리케이션을 구축할  있을 정도로 발전한 것처럼새로운 것을 익혀서 우리에게 돌아 오는 것은 스트레스가 아니라 좋은 작품과 무한한 상상력일 것이다.

다음 편에서는 AS2.0에서 AS3.0으로 버전이 올라가면서 어떤 점이 달라졌는지 구체적으로 살펴볼 것이다. AS2.0 사용하는 사람들이라면다음 편이 AS3.0 이해하는  도움이 많이  것이다.




'Actionscript3.0' 카테고리의 다른 글

숫자에 1000단위 콤파(,)를 넣어주는 방법 -AS3.0  (3) 2009.03.15
Actionscript3.0 학습법  (9) 2009.01.20
Actionscript3.0 강좌 모음  (0) 2008.12.15