작성된 날짜 : 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.0과2.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 이상을 설치함에 따라 빠르게 해결될 수 있는 문제다.
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와 같다.
물론 코드와 컴퓨터 상태에 따라 수행 시간 차이는 줄어 들 수 있겠지만, 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. 크로스 스크립팅
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 의 쓰임
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 |