이제 슬슬 3.0이 자리를 잡아가는거 같은 느낌이 듭니다.

그래서 3.0을 처음 공부하시는 분들이 아닌

2.0을 하시다가 3.0을 공부하시는 분들께

특히 다른 언어를 경험해보지 않으셨던 분들

즉, 2.0에 푹 길들여져있던 분들께 도움을 되지 않을까 싶네요.



 - 2.0때 되던 기능이 3.0에는 없어서 불편하다.

가장 많이 물어보는 질문이 onReleaseOutside 랑 duplicateMovieClip 을 가장 많이 물어봅니다.

물론 굉장히 편리한 메소드이기는 하죠.

하지만 3.0을 공부하면서 가장 밑바닥 개념으로 깔아놔야될 점이 바로

"제대로 된 언어" 이라는겁니다.

즉, 안되는건 없습니다.

다만 여러가지 기능을 하나로 묶어서 2.0때 하나의 메소드로 제공했거나

플래시가 스스로 처리했던 부분을 우리가 컨트롤 할 수 있도록 되었다는 것입니다.

3.0에서 안될리가 없습니다.

분명히 장담하지만 2.0때 되던게 3.0에서 못하는건 없습니다. (심지어 duplicate 도 만든다면 만들 수 있습니다.)

onReleaseOutside 는 아래와 같은 구조로 되어 있습니다.

1. 마우스를 누를때 mouseOut 이벤트를 걸어놓습니다.

2. 마우스를 누른 상태에서 마우스가 빠져나가면 mouseOut 이벤트를 캐치해서 이번엔 mouseUp 이벤트를 걸어놓습니다.

3. 이때 mouseUp 이벤트가 발생하면 이것이 바로 onReleaseOutside 입니다.

위 구조를 알고 있다면 3.0에서 똑같이 구현할 수 있습니다.



 - 클릭하나 체크하는데 너무 불편해요~

글쵸 기존에는 onMouseDown = function(){} 으로 바로 선언했지만

3.0에서는 이벤트 걸어주고 이벤트 받는 메소드 만들고

메소드도 타입 정해주고 메소드도 나눠지다보니까 값을 참조하려면 난감해지고

이상하게 자꾸 소스가 지저분해지는것 같죠.

자 여러분, 기존에는 자전거 부품가게에서 브레이크나 핸들, 뾱뽁이을 사다가

자전거를 만들었었습니다. 이때가 2.0 이었죠.

이제는 프레임을 만드는데 쓰이는 철, 알루미늄, 스뎅을 구할 수 있게되었고

핸들을 만드는데 쓰이는 고무, 와이어, 실리콘등을 구할 수 있게 된것이 바로 3.0 입니다.

즉 더 low 한 기능을 우리가 직접 컨트롤 할 수 있게 된것이죠.

가장 대표적인 부분이 Event 와 DisplayObjectContainer 그리고 Document Class 입니다.

3.0때 새로 나왔다고 생각하시는 분이 많은데

새로워지긴 했지만 2.0때 플래시가 자동으로 처리해주던 부분이

더 이쁘게 다듬어져서 나온것입니다.

onMouseDown 은 해당 무비클립에 이미 addEventListener 를 걸어놓고

리스너에서는 onMouseDown 이라는 함수를 실행하도록 미리 선언을 해놓았던 겁니다.

그렇기 때문에 우리는 onMouseDown 을 만들어주기만 하면 되었던 겁니다.

또 우리는 바닥에 무비클립을 만들어서 걍 돌리기만 하면 됐는데

3.0에서는 Document Class 선언해줘야되고

무비클립 하나하나 public 으로 선언해줘야되고

아 짜증나죠?

근데 2.0때는 플래시가 스스로 이미 그런 처리를 하고 있었던겁니다.

이제 그걸 우리가 할 수 있도록 제공되는것이죠.

그만큼 우리는 더 디테일하게 컨트롤 할 수 있고

더더욱 좋은 퍼포먼스, 더 최적화된 플래시를 만들 수 있게 된것이죠.



 - 일일이 addChild 하기 귀찮고 root 도 될때 안될때 있고 귀찮아요~

위에서 말했다시피 mc.createEmptyMovieClip() 은

var newMC: MovieClip = new MovieClip();
mc.addChild( newMC )

라는 메소드를 하나로 묶어놓은것 뿐입니다.

이 덕분에 우리는 그토록 갈망하던 이 인스턴스에서 저 인스턴스로 무비클립을 이동시킬 수 있게 되었죠.

그런데 이 기능은 안되는것이 오히려 이상했던겁니다.

OOP 입장에서 가장 기본이 되는 클래스가 인스턴스화되는 순간 특정 부모의 자식으로 고정되어버린다는것은

엄청난 제약을 받는것이라고 볼 수 있습니다.



 - 절대 2.0에서 쓰던 방식으로 3.0을 구현하려고 하지 마십시요.

onMouseDown 이 편했던건 사실입니다.

하지만 편했던 만큼 디테일하게 다룰 수 없었고

변수 스코프문제나 변수 전달등의 문제가 있었습니다.

그렇다고해서 3.0에서 public var onMouseDown: Function 으로 선언해놓고

mc.onMouseDown = function(){} 이렇게 하지 마십시요.

의외로 2.0때 쓰이던 방식을 3.0때도 그렇게 구현해서 쓰려고 애쓰는 사람 많습니다.

절대로 그렇게 하지 마십시요.

바로 이점 때문에 2.0을 하던사람이 오히려 새로 배우는 신입보다 3.0을 익히는 속도가 느린 이유입니다.

2.0 때의 습관이 몸에 베서 어떤게 더 효율적이고 어떤게 더 OOP 적인지 모르는 현상입니다.

특히 다른 언어를 모르는 상태에서 2.0만을 접한 사람들의 특징입니다.

클래스나 변수, 리턴타입, static, 상속에 대해서 잘 받아들이지 못하고

이해하는데 굉장히 힘들어합니다.

속마음은 이럴껍니다. "뭐하러 저렇게 복잡하게하지? 그냥 parent 로 가져다 쓰면 되는데..."

반박할 논점은 많지만

가만히 생각해보면 자바나 C 같은 언어진영에서 50년이 넘게

쓰이던 방식인데 설마 그걸 몰라서 안 그랬을까요?

아직은 모르겠지만 다 그만한 이유가 있기 때문이고 그럴 필요가 있기 때문에 그럴꺼라는

믿음을 가져보십시요.



이제 플래시가 UCC 를 필두로해서

어플리케이션으로써의 면모를 대중에게 선보이기 시작했습니다.

이는 곧 우리의 고객들이 비슷한 수준을 원하게 될거라는 의미며

고객이 원한다는것은 이제 우리가 그런것을 할 줄 알아야 한다는 의미입니다.

이웃팀 팀장님께서 알려주신것 처럼 "붉은 여왕 효과" 라는 말이 있습니다.

제자리에 있으려면 힘껏 달려야합니다.

왜냐면 모두가 달리고 있기 때문이죠.

솔직히 말해서 3.0의 등장은 기존의 2.0 개발자들에게

굉장히 불리한 언어입니다.

왜냐면 2.0 은 말이 스크립트지 언어도 아니며 스크립트도 아니며

좀 이상한 명령어들의 집합이었다고들 합니다.

누가 그러냐구요? 자바나 C 처럼 오랜 역사를 가지고 있는 언어쪽의 개발자들의 말입니다.

사실입니다.

그래서 3.0 이 제대로된 언어의 모습으로 세상에 나왔을때

우리가 우와 이게 뭐야? 하면서 멀뚱 멀뚱할때

이미 자바나 C 진영에서 새로운 아이디어를 갈구하던 많은 개발자들은

나오자마 엄청난 라이브러리들을 만들기 시작했습니다.

그게 벌써 1년이 지났네요.

요즘 AIR를 타겟으로 수많은 개발 방법론, 아키텍쳐, 개발 지원 툴들이

어마어마하게 쏟아져 나오고 있습니다.

얼마나 어마어마하냐면

이렇게 설명하면 이해가 되겠네요.

자바나 C 에서 50년도 넘게 걸쳐서 확립되고 논의를 거쳐 정리된 이론들이

플래시쪽으로 다이렉트로 적용되고 있습니다.

안타깝게도 우리는 따로 공부할 시간이 없습니다.

이미 남들은 그런 경험을 바탕으로 엄청난 소프트웨어를 만들고 있을때

우리는 현장에서 허겁지겁 익혀야합니다.

왜냐구요? 남들보다 잘할려고 하기보다 "제자리"에 있기 위해서죠.

늦지 않았습니다.

나이 먹어서 장사나 하려고 프로그램 하는 사람들은

어차피 그러다가 다른 쪽에서 돈 더 준다고하면 가차없이 플래시를 버릴 사람들입니다.

뼛속까지 개발하고 싶어하는

내가 만든 코드가 돌아갈때 희열을 느끼는 골수 플래시 개발자들에게는

이제 업그레이드할 시기가 왔습니다.

오히려 이제 진정한 "개발자"로써 탈피할때이죠.

2.0의 습관이나 메소드는 과감히 버리십시요. (회사에서 짤리지 않을 만큼만 ㅋㅋ)

이제 플래시로도 Language 입니다.

다들 홧팅~

p.s) 시간나면 야꼬한테 후원해주세요^^ 가상의 후원금입니다. ㅎㅎ


+ Recent posts