너의 목소리가 들려… 하악하악…
말 하지 않으면 상대편이 들을수 없습니다. 뭐 당연한 거죠… 하지만, 프로그래밍과 사람의 차이점이라면, 사람은 들으려 하지 않아도 일단 들리지만, 프로그래밍은 들으려 하지 않으면 들을수 없습니다. 입으로 얘기를 해야만 들을 수 있는 것처럼, 프로그래밍은 듣기 위해 귀를 열어야만 들을 수 있습니다. 이렇게 생각해 보세요… 마치 말하기 위해 입을 열어야만 하는 것처럼, 듣기 위해 귀를 여는 자신을…
상상하기 어렵죠?
EventDispatcher
일단 지난 시간에 봤던 MovieClip 의 상속구조를 보세요.
http://ssen.name/develop/as/grand/Grand1.png
맨 끝쪽에 Object 위에 EventDispatcher 가 있죠? 그리고, EventDispatcher 를 상속받는 class 들을 한 번 보도록 하겠습니다.
존내 많죠?
EventDispatcher 는 DisplayObject 만 보더라도 일단 눈에 보이는 모든 것들이 다 EventDispatcer 를 상속받은 셈이 되기 때문에, 굉장히 중요한 하위 class 입니다. 이 EventDispatcher 는 좀 쉽게 이야기 하자면… "말하고, 듣기" 를 구현하는 녀석입니다.
dispatchEvent... 말하기
일단 말하는 놈을 하나 만들어보죠
EventDispatcher 를 상속받아서 "말하는 놈" 을 하나 만들어줍니다.
뭐 간단합니다. 만일 gogo() 라는게 실행되면 dispatchEvent 라는 "말하기" 기능을 통해서, "gogoEvent!!!" 라고 외칩니다. 그냥 이렇게 말하는게 땡입니다. 레퍼런스를 한 번 볼까요?
DisplayObject 의 이벤트 리스트 입니다. 이게 뭘 말하냐 하면… 얘가 위에서 "gogoEvent" 라고 외치는 것처럼, 이런 말들을 외친다는 이야기입니다. 그러니깐, DisplayObject 는 각각의 상황들이 생길때 "activate, added, addedToStage, deactivate, enterFrame, removed, removedFromStage, render" 가 발생했다!!! 라고 외치는 거죠…
여러분도 위기에 처하면 "꽥 살려주삼!!!" 이라고 외치고, 웃기면 "우헤헤헤헤헤~" 라고 외치죠? 그냥 그런겁니다… 어떤 상황이 생겼을때 얘가 무슨 이야기를 할거다… 라고 알려주는 겁니다.
그리고, DisplayObject 안에는 위의 코드처럼 dispatchEvent 를 통해서 이런 말들을 외칩니다.
addEventListener… 듣기
말하면 듣는 놈도 있어야죠… 들어보도록 하겠습니다.
dis.addEventListener 이건 쉽게 해석해서 "dis 놈이 하는 gogoEvent 라는 말을 내가 듣겠다" 라는 뜻입니다. dis.addEventListener(어떤말, 들으면 이런걸 하겠다) 라는 뜻입니다. 어떤말을 들었을때, 이런걸 하겠다… 라는 이야기죠. 이것을 실행해보면
이렇게 getEvent 에 설정한 행동을 합니다.
Event 의 상속… 영희가 애를 X놈이나 낳았데!!!
일 단 단순한 말의 경우엔 위에서처럼 "gogoEvent" 라는 문자 하나로 이야기 할 수 있습니다. 하지만, "영희가 애를 3놈 낳았데!" 가 될수도 있고, "영희가 애를 2놈 낳았데!" 처럼, 어떤 변수가 존재할때는 새로운 알림말을 만들어야 합니다.
이런식으로 이벤트 형식을 하나 만들어줍니다. 자 이걸 사용해 볼까요?
자… 영희가 애를 낳는 이벤트를 하나 만듭니다. YungheeBabyEvent 의 형식에 맞춰서 babies 변수를 넣어줬습니다.
그리고, 이렇게 듣는놈을 좀 수정해 줍니다. 실행해보면
이렇게 정상적으로 수신합니다.
Event class 는 어떤 기능이 없습니다.
초 보들이 Event 를 공부할때 당황하게 되는것은 일단 Event class 를 뒤지기 때문입니다. Event class 의 기능적인 면을 숙지하려고 하려고 하는데, 막상 Event class 는 그냥 "말 덩어리" 일 뿐이거든요…;;; 야구로 치면 투수(dispatchEvent) 가 포수(addEventListener) 에게 던지는 공(Event) 일 뿐이거든요…;;; 걍 덩어리일 뿐입니다. 별다른 기능이 없어요. 당연히 Event class 를 파고 들어봤자 뭘 알만한게 없습니다. 오히려 미궁에 빠지게 되죠.
Event 에서 중요한 것은 EventDispatcher 입니다. "말하기", "듣기" 에 대한 기능은 모두 이놈을 상속받아 만드는 거거든요. 위에서도 말했다시피 왠만한 놈들은 다 이 말하기, 듣기 기능을 구현하기 위해서 EventDispatcher 를 상속받아서 만들어졌습니다. ActionScript 3.0 에서 가장 중요한 class 중에 하나이죠.
오해하지 말아야 하는 부분…
일단 테스트 목적으로 넣은 코드니깐, 이 부분은 신경 쓰지 마세요…
dispatchEvent 가 발생하는 경우는 상당히 다양하죠. 만일 타이머를 가진다 했을때는 timer 가 100 초가 되는 순간에 "timer100" 이라는 이벤트가 발생할 수도 있겠죠?
그만듣기… removeEventListener
음… 이건 상당히 중요합니다. addEventListener 로 "듣기" 설정된 녀석은 일단 "메모리" 에 올라가게 되는데요. 이 "듣기" 를 해제해주지 않으면 상당히 곤란한 일이 많이 생깁니다. "메모리" 에서 안빠지거든요…;;; 화면에서 dis 를 삭제한다고 해도, dis 는 "메모리" 에 계속 남아있게 됩니다. 상당히 쉣 같죠…
그러므로 객체를 안쓰게 될때는 이렇게 removeEventListener 를 통해서 "듣기" 를 삭제해줘야 합니다.
듣는 중인지 확인하기… hasEventListener
코드가 복잡해지다 보면, 내가 지금 "이 이벤트를 듣는중인가… 안듣는 중인가…" 애매해 질때가 있습니다. 뭐 기계적으로 판단해서 if 문을 제어해야 할때도 있죠. 그럴때 사용하는 함수입니다.
이렇게 hasEventListener 를 통해서 이벤트를 듣는 중인지 확인하면
요렇게 듣는 중일때는 true 가 나오고, 안듣는 중일때는 false 가 나오게 됩니다. 이런것을 통해서 제어해야 할 경우도 생깁니다.
말을 확실하게 하기… 상수로 만들기
위 에 코드를 직접 코딩하면서 보시고 계신가요? 뭐… ' ㅡ 'a 심심풀이로 하시는 거면 걍 보시면 되는데, 배울 목적으로 보시면서 눈으로만 읽는건 걍 안읽는게 낫죠… 눈보단 손이 똑똑하거든요… 눈으로 공부하는 사람이 제일 불성실한 사람이고, 눈으로 공부하는 사람 중에서 제대로 배우는 사람 못봤습니다. (갈굼모드…;;;)
따 라해본 분이면 아시겠다시피, 이벤트의 기준이 되는 "yungheeBaby" 를 계속 쓰는건 상당히 피곤한 일입니다. 일단, 오타가 날수도 있고, 좀 뭔가 확실하지가 않으니깐요. 이런것을 위해서 이벤트의 기준이 되는 것들을 상수로 만들어줍니다.
const(상수) = var(변수) 와는 틀리게, 값을 바꿀수 없습니다.
요렇게 상수에 넣어둡니다.
그리고, 이렇게 dispatchEvent 부분도 바꿔주고…
듣기 부분도 이렇게 바꿔줍니다. 이러면 오타걱정도 없고, 알아보기도 쉽겠죠?
그리고… 무엇보다 Flex 나 FDT 같은 에디터에서는…
이렇게 코드힌트가 나오거든요…;;; (개발자가 기억력 존내 좋은줄 알았찌~ 아니야~!!! -신급 메모장 워리어는 제외...)
ActionScript 에서 Event 를 표현하는데 표준적으로 사용되는 방법이니, 새로운 Event 를 만들때나, 사용할때 모두 이렇게 사용하시면 됩니다.
F1 눌러서 봐야할 부분
뭐 지난 시간을 끝으로 일단 F1 도움말을 열어서 레퍼런스를 볼 수 있는데 필요한 기초적인 지식은 다 배웠기 때문에, 이번 시간부터는 F1 을 적극적으로 활용합니다. F1 도움말을 열어서 각 class 들의 이벤트 리스트들을 살펴보세요.
뭐 이건 URLLoader 가 말해주는 이벤트 들입니다. 초보들이 "우왕~ 우왕~" 하는 progress 이벤트가 있네요. (로딩바 만들기에 필요한 것)
이 런식으로 일단 이벤트 리스트들만을 집중적으로 해서 한 번 주욱~ 보세요. "내장기능" 들과 친해져야 할텐데, 얘네들이 무슨말을 하는지도 모르면 친해지는데 어려움을 겪겠죠? 이 한번 보는걸 통해서 ActionScript3.0 의 구조를 꽤 많이 깨달을수 있을겁니다.
어 쨌든… 기초중에 기초… 진도를 나아가기 위해서는 꼭 알아야 하는것들이 대충 끝났습니다. for, switch, Array 이딴것들 몰라도 진도 나가는데는 전혀 지장 없지만, class, if, event, trace 같은건 모르면 끝장이거든요. 대가리가 터지도록 어려운건 방법이 생기지만, 아싸리 원리 조차 이해못해서 방법을 못찾으면 대책이 안서게 됩니다. 뭐 기초이론은 대충 끝났으니 다음 시간부터는 ActionScript 로 뭘 할 수 있는지를 배워보도록 하죠~
제목 | 글쓴이 | 날짜 | 조회 |
---|---|---|---|
2003-09-20 |
12021 |
||
2003-09-20 |
11567 |
||
2003-09-20 |
20724 |
||
지구인 |
2010-08-27 |
19500 |
|
지구인 |
2009-09-07 |
13815 |
|
2010-01-29 |
15784 |
||
2004-10-07 |
16865 |
||
2009-05-28 |
3086 |
||
2396 [웹 프로그래밍] 08 . 상속 |
2009-05-28 |
2411 |
|
2009-05-28 |
2510 |
||
2009-05-28 |
2438 |
||
2009-05-28 |
2410 |
||
2009-05-28 |
2780 |
||
2009-05-28 |
2621 |
||
2009-05-27 |
2326 |
||
2389 [웹 프로그래밍] 01 . Trace |
2009-05-27 |
2756 |
|
2388 [웹 프로그래밍] FDT |
2009-05-27 |
2543 |
|
2009-05-26 |
1615 |
||
2009-05-26 |
3518 |
||
2009-05-26 |
2691 |
||
2009-05-26 |
3129 |
||
2009-05-26 |
2453 |
||
2009-05-26 |
3184 |
||
이보시오 |
2009-05-25 |
4580 |
|
2380 [웹 프로그래밍] SVN |
2009-05-24 |
3398 |
|
2009-05-24 |
2160 |
||
2009-05-24 |
1723 |
||
2377 [웹 프로그래밍] 스크롤바 만들기 |
2009-05-24 |
3933 |