diary       blog       guest

IEventDispatcher 인터페이스

http://www.action-scripter.com/blog/trackback/1110
IEventDispatcher 인터페이스는 이벤트 리스너를 추가하거나 제거하기 위한 메서드를 정의하고, 특정 유형의 이벤트 리스너가 등록되었는지 여부를 확인하며, 이벤트를 전달되는데요. IEventDispatcher 인터페이스는 EventDispatcher 클래스를 통해 구현됩니다.

Flash Player API는 이벤트 대상 또는 이벤트 흐름 구성 요소일 수 있는 모든 클래스의 기본 클래스로 사용되는 EventDispatcher 클래스를 사용하여 IEventDispatcher 인터페이스를 구현합니다. 예를 들어, DisplayObject 클래스는 EventDispatcher 클래스에서 상속됩니다. 즉, 표시 목록의 모든 객체는 IEventDispatcher 인터페이스의 메서드에 액세스할 수 있습니다.

IEventDispatcher 인터페이스는 다음 코드와 같이 다섯 개의 메서드를 정의합니다.

  1. package flash.events {
  2.    public interface IEventDispatcher {
  3.       function addEventListener(eventName:String, listener:Object,
                                    useCapture:Boolean=false,
                                    priority:Integer=0,
                                    useWeakReference:Boolean=false):Boolean;
  4.       function removeEventListener(eventName:String, listener:Object,
                                       useCapture:Boolean=false):Boolean;
  5.       function dispatchEvent(eventObject:Event):Boolean;
  6.       function hasEventListener(eventName:String):Boolean;
  7.       function willTrigger(eventName:String):Boolean;
  8.    }
  9. }

인터페이스는 메서드의 인터페이스와 해당 구현이 서로 구분된다는 점을 기반으로 합니다. 메서드의 인터페이스에는 해당 메서드를 호출하는 데 필요한 메서드 이름, 모든 매개 변수 및 반환 유형 등의 모든 정보가 포함됩니다. 메서드 구현에는 인터페이스 정보뿐만 아니라 메서드의 비헤이비어를 수행하는 실행 가능한 명령문도 포함됩니다. 인터페이스 정의에는 메서드 인터페이스만 들어 있으며, 해당 인터페이스를 구현하는 모든 클래스에서는 메서드 구현을 정의해야 합니다.

Flash Player API의 EventDispatcher 클래스에서는 모든 IEventDispatcher 인터페이스 메서드를 정의하고 각 메서드에 본문을 추가하여 IEventDispatcher 인터페이스를 구현합니다.

다음은 EventDispatcher 클래스 정의에서 인용한 코드입니다.

  1. public class EventDispatcher implements IEventDispatcher {
  2.    function dispatchEvent(event:Event):Boolean {
  3.       /* 구현 명령문 */
  4.    }
  5.    ...
  6. }


IEventDispatcher 인터페이스는 EventDispatcher 인스턴스에서 이벤트 객체를 처리하고 마찬가지로 IEventDispatcher 인터페이스를 구현하는 다른 객체로 이벤트 객체를 전달하는 데 사용되는 프로토콜 역할을 합니다. 또한 인터페이스는 클래스와 마찬가지로 데이터 유형을 정의합니다. 따라서 클래스와 마찬가지로 인터페이스를 유형 약어로 사용할 수 있습니다. 인터페이스는 데이터 유형이므로 데이터 유형이 필요한 is 및 as 등의 연산자와 함께 사용할 수 있습니다. 그러나 클래스와 달리인터페이스는 인스턴스화할 수 없습니다. 이러한 차이점으로 인해 인터페이스를 추상적인 데이터 유형으로, 클래스를 구체적인 데이터 유형으로 이야기 되고 있습니다.


인터페이스(interface)란 무엇인가?
(콜린무크의 Flash ActionScript 2.0 - 2005 中)

인터페이스는 관련되지 않은 여러 객체가 서로 통신할 수 있게 하는 메서드 선언을 모아 놓은 것을 말하는데 클래스가 새로운 데이터 유형을 정의하고 그것에 대한 실제적인 사용법(속성, 메서드)를 제공하는 반면 인터페이스는 추상적인 데이터 유형만을 정의합니다. 즉, 인터페이스는 데이터 유형에 대한 실제적인 구현이 존재하지 않습니다.

다시 말해, 클래스는 메서드와 속성을 선언한 다음 메서드의 구체적인 행동을 구현하며, 클래스에서 메서드와 속성을 사용하여 처리하는 작업에 대한 코드를 작성합니다. 하지만 인터페이스는 자신이 처리할 구체적인 행동은 제공하지 않고, 하나 또는 다른 여러개의 클래스가 인터페이스의 역할을 구현하도록 제시합니다.

인터페이스를 구현하는 클래스는 클래스 자신의 데이터 유형 또는 인터페이스에 해당하는 데이터 유형이 될 수도 있습니다. 다양한 데이터 유형으로 존재할 수 있기 때문에 클래스는 어플리케이션에서 다양한 역할을 수행할 수 있는 것입니다.

핵심은 인터페이스는 행동에 대한 선언(define)만을 담고 있으며 실제적인 구현(implementation)은 클래스에서 이뤄집니다. 그래서 클래스에서 인터페이스를 구현하기 위해서는 implements 키워드를 사용해서 구현할 인터페이스를 선언해 주는 것입니다. (한번에 여러 인터페이스를 구현 할 수 있습니다.)

2008/09/19 10:23 2008/09/19 10:23

Comments List

  1. 검쉰 2008/09/19 13:15 # M/D Reply Permalink

    좋은 글 잘 읽고 갑니다. ;)

    1. 땡굴이 2008/09/19 20:37 # M/D Permalink

      아직 이해가 안 가는 곳이 많아요. 작업을 많이 해 봐야 하는데 좋은 정보 있으면 함께 공유하도록 할게요.

  2. 꽃녀 2008/09/19 13:28 # M/D Reply Permalink

    음.. 잘보고 갑니당!

    1. 땡굴이 2008/09/19 20:40 # M/D Permalink

      제가 생각해서 쓴 글은 얼마 없어요. 기존에 나와있는 정보들 정리한거라 저도 글 쓰면서 공부했답니다. ^^;

  3. 찌노 2008/09/20 16:08 # M/D Reply Permalink

    크~~~ 설명을 이렇게 잘하는것도 능력인가봐요.. 사용하면서도 다른사람한테 설명하는게 참 어려우니..;;;
    배워갑니다 형님!

    1. 땡굴이 2008/09/21 01:14 # M/D Permalink

      내가 설명한것도 아닌데 뭘.. 나도 배우는 입장에서 확실하게 이해를 하고 싶지만 아직 모르는게 너무 많아. 끝은 알 수 없지만 그래도 재미있으니까. 꾸준히 해야겠지. 크크.

   1   ... 238  239  240  241  242  243  244  245  246   ... 1285    
ABOUT  |  WORKS  |  @seonggyu
COPYRIGHT ⓒ 2000 - 2010. ACTION-SCRIPTER.COM. ALL RIGHTS RESEVED.