이벤트 처리의 기초

Flash Player 9 이상, Adobe AIR 1.0 이상

이벤트는 SWF 파일에서 발생하는 동작이며 프로그래머에게 매우 중요합니다. 예를 들어 대부분의 SWF 파일은 사용자 상호 작용을 지원합니다. 이러한 상호 작용은 마우스 클릭에 응답하는 것처럼 간단할 수도 있고 양식에 입력된 데이터를 적용 및 처리하는 것처럼 복잡할 수도 있습니다. SWF 파일과의 이러한 상호 작용을 이벤트라고 합니다. 그러나 서버에서 데이터 로드를 마쳤을 때 또는 연결된 카메라가 활성화될 때와 같이 직접적인 사용자 상호 작용 없이도 이벤트가 발생할 수 있습니다.

ActionScript 3.0에서 각 이벤트는 Event 클래스 또는 해당 하위 클래스의 인스턴스인 이벤트 객체로 나타냅니다. 이벤트 객체는 특정 이벤트에 대한 정보를 저장할 뿐만 아니라 해당 이벤트 객체를 쉽게 조작하는 데 사용할 수 있는 메서드도 포함합니다. 예를 들어 Flash Player 또는 AIR에서는 마우스 클릭을 감지하면 특정 마우스 클릭 이벤트를 나타내는 이벤트 객체(MouseEvent 클래스의 인스턴스)가 만들어집니다.

이벤트 객체를 만든 후에는 Flash Player 또는 AIR에서 이 이벤트 객체를 이벤트 대상 객체에 전달합니다. 전달되는 이벤트 객체의 대상으로 사용되는 객체를 이벤트 대상이라고 합니다. 예를 들어 연결된 카메라가 활성화되면 Flash Player에서 이벤트 객체를 직접 이벤트 대상에 전달하는데, 이 경우 이벤트 대상은 해당 카메라를 나타내는 객체입니다. 그러나 이벤트 대상이 표시 목록에 있는 경우에는 표시 목록 계층 구조를 통해 해당 표시 목록에서 이벤트 대상을 찾을 때까지 이벤트 객체가 전달됩니다. 경우에 따라서는 이벤트 객체가 같은 경로를 따라 표시 목록 계층 구조에서 다시 위로 "버블링"될 수도 있습니다. 이러한 표시 목록 계층 구조 순회를 이벤트 흐름이라고 합니다.

코드에서 이벤트 리스너를 사용하여 이벤트 객체를 "수신"할 수 있습니다. 이벤트 리스너는 특정 이벤트에 응답하기 위해 작성하는 함수 또는 메서드입니다. 프로그램에서 이벤트에 응답할 수 있도록 하려면 이벤트 대상 또는 이벤트 객체의 이벤트 흐름에 포함된 표시 목록 객체에 이벤트 리스너를 추가해야 합니다.

이벤트 리스너 코드를 작성할 때는 다음과 같은 기본 구조를 따릅니다. 여기서 굵게 표시된 요소는 특정한 경우에 입력하는 자리 표시자입니다.

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

이 코드는 두 가지 작업을 수행합니다. 먼저 함수를 정의하여 이벤트에 대한 응답으로 수행할 작업을 지정할 수 있습니다. 그런 다음 소스 객체의 addEventListener() 메서드를 호출하여 지정된 이벤트에 대해 함수를 "제공"함으로써 이벤트 발생 시 함수 작업이 수행되도록 합니다. 실제로 이벤트가 발생하면 이벤트 대상이 이벤트 리스너로 등록된 모든 함수와 메서드 목록을 확인합니다. 그런 다음 각 함수와 이벤트를 차례로 호출하여 이벤트 객체를 매개 변수로 전달합니다.

이벤트 리스너를 직접 만들려면 이 코드에서 네 가지를 변경해야 합니다. 먼저 함수 이름을 사용자가 사용할 이름으로 변경해야 합니다. 코드에서 eventResponse라고 표시된 두 군데를 변경합니다. 두 번째로, 수신할 이벤트에서 전달한 이벤트 객체에 적절한 클래스 이름(코드에서는 EventType)을 지정해야 하며 특정 이벤트에 적절한 상수(샘플의 EVENT_NAME)를 지정해야 합니다. 세 번째로, 이벤트를 전달할 객체에서 addEventListener() 메서드(이 코드에서는 eventTarget)를 호출해야 합니다. 필요에 따라 함수의 매개 변수로 사용된 변수의 이름(이 코드에서는 eventObject)을 변경할 수 있습니다.

중요한 개념 및 용어

이벤트 처리 루틴을 쓸 때 사용되는 중요한 용어들이 아래 참조 목록에 정리되어 있습니다.

버블링
특정 이벤트에 버블링이 발생할 경우 부모 표시 객체가 해당 자식이 전달하는 이벤트에 응답할 수 있습니다.

버블링 단계
이벤트 흐름 중 이벤트가 부모 표시 객체까지 전달되는 단계를 가리킵니다. 버블링 단계는 캡처 단계와 대상 단계 뒤에 일어납니다.

캡처 단계
이벤트 흐름 중 이벤트가 가장 일반적인 대상에서 가장 구체적인 대상 객체로 전달되는 단계를 가리킵니다. 캡처 단계는 대상 단계와 버블링 단계 앞에 일어납니다.

기본 비헤이비어
일부 이벤트에는 일반적으로 이벤트와 함께 발생하는 비헤이비어가 포함되어 있는데, 이를 기본 비헤이비어라고 합니다. 예를 들어 사용자가 텍스트 필드에 텍스트를 입력하면 텍스트 입력 이벤트가 발생합니다. 이 이벤트의 기본 비헤이비어는 텍스트 필드에 입력한 문자를 실제로 표시하는 것이지만, 어떠한 이유로든 입력한 문자를 표시하지 않으려는 경우 이 기본 비헤이비어를 재정의할 수 있습니다.

전달
이벤트가 발생했음을 이벤트 리스너에 알리는 것입니다.

이벤트
객체에 발생하는 것으로, 이에 대해 객체가 다른 객체에 알릴 수 있습니다.

이벤트 흐름
표시 목록의 객체(화면에 표시되는 객체)에 이벤트가 발생하면 해당 객체를 포함하는 모든 객체에 이벤트를 알리고 해당 객체가 이를 다시 이벤트 리스너에 알립니다. 이 프로세스는 스테이지에서 시작하여 표시 목록을 통해 이벤트가 발생한 실제 객체로 이동한 다음 다시 스테이지로 돌아갑니다. 이 프로세스를 이벤트 흐름이라고 합니다.

Event 객체
특정 이벤트의 발생에 대한 정보가 포함된 객체입니다. 이 객체는 이벤트를 전달할 때 모든 리스너에 보내집니다.

이벤트 대상
이벤트를 실제로 전달하는 객체입니다. 예를 들어 사용자가 스테이지 안에 있는 Sprite 안의 버튼을 클릭하면 해당하는 모든 객체가 이벤트를 전달하지만 이벤트 대상은 실제로 이벤트가 발생한 객체(이 경우, 클릭한 버튼)입니다.

리스너
특정 이벤트가 발생하는 경우 알려야 함을 나타내기 위해 객체에 등록된 객체 또는 함수입니다.

대상 단계
이벤트 흐름 중 이벤트가 가장 구체적인 가능 대상에 도달한 시점을 가리킵니다. 대상 단계는 캡처 단계와 버블링 단계 사이에 일어납니다.