주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
연길시 신화서점 조선말 도서

09 . Event… 말하는 놈과 듣는 놈

SOLIDH | 2009.05.28 21:23:28 댓글: 0 조회: 3086 추천: 0
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1759776

너의 목소리가 들려… 하악하악…

말 하지 않으면 상대편이 들을수 없습니다. 뭐 당연한 거죠… 하지만, 프로그래밍과 사람의 차이점이라면, 사람은 들으려 하지 않아도 일단 들리지만, 프로그래밍은 들으려 하지 않으면 들을수 없습니다. 입으로 얘기를 해야만 들을 수 있는 것처럼, 프로그래밍은 듣기 위해 귀를 열어야만 들을 수 있습니다. 이렇게 생각해 보세요… 마치 말하기 위해 입을 열어야만 하는 것처럼, 듣기 위해 귀를 여는 자신을…

   

상상하기 어렵죠?

   

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 로 뭘 할 수 있는지를 배워보도록 하죠~


출처: ssen님레시피

http://ssen.name/zb/2187


추천 (0) 선물 (0명)
첨부파일 다운로드 ( 18 )
download1.png | 63.7KB / 0 Download
download2.png | 14.3KB / 0 Download
download3.png | 67.9KB / 0 Download
download4.png | 99.9KB / 0 Download
download5.png | 41.5KB / 0 Download
download6.png | 53.8KB / 0 Download
download7.png | 20.2KB / 0 Download
download8.png | 20.3KB / 0 Download
download9.png | 41.2KB / 0 Download
download10.png | 3.4KB / 0 Download
download11.png | 23.5KB / 0 Download
download12.png | 30.0KB / 0 Download
download13.png | 36.5KB / 0 Download
download14.png | 81.9KB / 0 Download
download15.png | 13.8KB / 0 Download
download16.png | 18.0KB / 0 Download
download17.png | 60.0KB / 0 Download
download18.png | 13.5KB / 0 Download
IP: ♡.48.♡.21
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
12021
관리자
2003-09-20
11567
관리자
2003-09-20
20724
지구인
2010-08-27
19500
지구인
2009-09-07
13815
SOLIDH
2010-01-29
15784
엔죠라이프
2004-10-07
16865
SOLIDH
2009-05-28
3086
SOLIDH
2009-05-28
2411
SOLIDH
2009-05-28
2510
SOLIDH
2009-05-28
2438
SOLIDH
2009-05-28
2410
SOLIDH
2009-05-28
2780
SOLIDH
2009-05-28
2621
SOLIDH
2009-05-27
2326
SOLIDH
2009-05-27
2756
SOLIDH
2009-05-27
2543
SOLIDH
2009-05-26
1615
SOLIDH
2009-05-26
3518
SOLIDH
2009-05-26
2691
SOLIDH
2009-05-26
3129
SOLIDH
2009-05-26
2453
SOLIDH
2009-05-26
3184
이보시오
2009-05-25
4580
SOLIDH
2009-05-24
3398
SOLIDH
2009-05-24
2160
SOLIDH
2009-05-24
1723
SOLIDH
2009-05-24
3933
모이자 모바일