짜야 될 코드량이 너무 많아요!
ActionScript 3.0의 마지막 오해 하나는 온라인에서건 오프라인에서건 자주 듣게 되는데 이는, “ActionScript
3.0 은 다 좋은데, 너무 고지식적이야! 간단한 거 만드는데도 코드가 너무 길어져!” 다음 두 예제는 제가 자주
ActionScript의 다변다용성을 알리는데 자주 사용하는 것들입니다.
1) ActionScript 1.0 이나 2.0으로 특정 URL을 접속하기 위해 다음의 코드를 씁니다.
getURL("http://www.moock.org");
ActionScript 3.0에서는 다음의 코드이고요.
navigateToURL(new URLRequest("http://www.moock.org"));
2) 특정 무비클립에 원하는 swf파일을 읽어오려면 ActionScript 1.0과 2.0에서는 다음과 같이 해야합니다.
someClip.loadMovie("foo.swf"); ActionScript 3.0에서는 이렇고요. var loader:Loader = new Loader(); loader.load(new URLRequest("foo.swf")); someClip.addChild(loader);
앞의 두 예제에서 중 ActionScript 3.0코드는 이전 버전의 코드보다 깁니다. 하지만 각각의 코드들만으로는
최근의 개발 트렌드를 반영할 수 없습니다. 제가 직접 프로그래밍을 해본 결과 ActionScript 3.0은
ActionScript 2.0과 1.0보다 항상 더 많은 코드가 필요한 건 아닙니다. 예를 들어 ActionScript
3.0에서 텍스트필드, 버튼, 무비클립등을 만들 때는 ActionScript 2.0 과 1.0 에서의 코드량과 비슷합니다. 여기
ActionScript 3.0과 그 이전 버전의 제대로 된 그 차이를 제대로 보여줄 수 있는 예제가 있습니다. // ActionScript 1.0 와 ActionScript 2.0 someClip.createTextField("t", 1, 0, 0, 0, 0); t.border = true; t.text = "hello world";
// ActionScript 3.0 var t:TextField = new TextField(); t.border = true; t.text = "hello world"; someClip.addChild(t);
단순히 보았을 때 ActionScript 3.0에서는 16번 이상의 타이핑이 더 필요합니다. 하지만 ActionScript
3.0의 구조적 차이는 여러 이점이 있습니다. 예를 들자면 ActionScript 3.0에서 다른 무비클립에 같은 텍스트필드를
하나 더 추가하기 위해 다음의 것을 하기만 하면 됩니다.
someOtherClip.addChild(t);
ActionScript 2.0과 1.0 에서는 이전의 코드에서 바로 간단히 텍스트필드를 복제 할 수 없습니다. 원하는
무비클립에 텍스트필드를 추가하도록 함수를 만들고, 추가된 텍스트 필드에 원래의 텍스트 필드의 정보들을 복사해 넣어야 합니다.
이렇게 하면 코드량이 많아지고 복잡해지는데, ActionScript 3.0에서는 이런 수고를 할 필요가 없습니다.
동일하게, ActionScript 3.0에서 기본적으로 정규표현식이나 events들이 제공되는데 반해
ActionScript 2.0 과 1.0에서는 이를 쓰기 위해 직접 만들거나, 다른 사람이 만든 것을 써야 하는데 이 때문에 더
많은 돈과 시간이 낭비됩니다.
게다가 이전 버전보다 더 간결해지는 예제도 많습니다. ActionScript 3.0의 XML 지원 시스템인 E4X가 그러합니다. 다음의 XML 데이터를 읽어야 된다고 가정해봅시다.
<STAFF> <EMPLOYEE> <NAME>Marco</NAME> <MANAGER>James</MANAGER>
</EMPLOYEE>
<EMPLOYEE> <NAME>Graham</NAME> <MANAGER>James</MANAGER>
<EMPLOYEE>
<EMPLOYEE> <NAME>James</NAME> <MANAGER>Dorian</MANAGER>
</EMPLOYEE> </STAFF>
위 자료에서 두 번째 EMPLOYEE의 NAME을 알기 위해 ActionScript 2.0과 1.0에서는 다음과 같이 해야 합니다.
staff.firstChild.childNodes[1].firstChild.firstChild
ActionScript 3.0 에서는 이렇습니다.
staff.EMPLOYEE[1].NAME
ActionScript 3.0의 코드가 더 짧고, 더 직관적입니다. 이제 MANAGER가 “James”인 모든 EMPLOYEE의 목록을 구해봅시다. ActionScript 2.0 와1.0 에서는,
var managedByJames = new Array(); for (var i = 0; i < staff.firstChild.childNodes.length; i++) { if (staff.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue == "James Porter") { managedByJames.push(staff.firstChild.childNodes[i]); } }
ActionScript 3.0 에서는,
staff.*.(MANAGER == "James Porter")
ActionScript3.0의 코드가 훨씬 더 짧고, 훨씬 더 직관적입니다.
각 개개의 구문 코드 별 길이 비교에서는 ActionScript 3.0이 더 긴 상황도 있었고, 짧은 상황도
있습니다. 하지만 실제로 코딩해보면 ActionScript3.0쪽이 깔끔한 구조로 훨씬 더 짧게 작성할 수 있었습니다. 딱 맞게
맞추어져서 부가작업 없이 짤 수 있었던 깔끔한 구조들 덕분이었습니다.
믿어주세요!
이제 요점을 정리해 보겠습니다. FutureSplash 때부터 Flash를 계속 써온 개발자가
ActionScript 3.0의 사용을 기피 할 이유는 없습니다. 여전히 timeline에 직접 간단한 스크립팅 할 수 있고,
여전히 배우기 간단하고, ActionScript2.0과 1.0보다 코딩이 그다지 복잡한 것도 아니기 때문입니다.
반대로 내가 ActionScript 3.0을 처음 배워 사용해보았을 때, 간결한 API들과 Flex
Builder의 coding assistance 기능으로 더 빠르게 프로그램을 만들 수 있었고, 이 후 유지보수도 더 쉽게
가능했습니다. 이를 써본 후 느낀 다른 장점들은 앞에서 설명한 것들 외에 아래에도 더 있습니다..
- ActionScript 2.0 보다 훨씬 빠르다.
- Binary소켓과 Binary data 접근
- 향상된 텍스트 처리지원
- 사운드 스펙트럼의 프로그래밍 가능
- Flash CS3와의 자원관리에서의 높은 통일성 (참조 http://moock.org/lectures/ActionScriptAndFlashCS3/)
- 무료 컴파일러와 개발프레임워크
- 그리고 50가지 이유 더: Reasons ActionScript 3.0 Kicks Ass, by Grant Skinner.
제 견해? 괜히 너무 복잡하고 어려울 것 같아서 ActionScript3.0을 아직 안 써봤으면
ActionScript3.0이 쓰기 불편하다는 그런 거짓말 믿지 마세요. 한번 관심을 갖고서, 편견도 갖지 말고, 넓은 마음으로
한달 가량 ActionScript3.0을 한번 써보세요. 그런 후 정말 괜찮은지, 맘에 드는지 판단하세요. 내 생각에 반드시
“그건 오해”였다고 생각하실 겁니다.
출처 : http://network.hanb.co.kr/view.php?bi_id=1485 |