본문 바로가기

액션스크립트 3.0

AS3.0 핵심 개념 : Display Object


개요

 

Display Object는 액션스크립트 3.0에서 지원하고 있는 시각화 객체들에 대한 관리시스템입니다. 우리가 알고 있는 OOP에 대한 개념을 실전에 적용한 대표적인 사례이기도 합니다. 기존 MoveiClip에 집중되어  있던 기능들을 Display Object 쪽으로 편입 시키거나 또는 저기반 언어로 재구성하였습니다.

 

AS2.0 에서 객체( MovieClip)를 시각화 시킬 때 'attachMovie'라는 키워드를 사용했는데, AS3.0에서는 'addChild' 를 사용합니다. 언듯 보기에는 동일해 보입니다. 여기서 잠시 두 명령의 차이를 보도록 하겠습니다.

 

     - attachMovie : Display Object간 관계 구성과 동시에 객체의 인스턴스 생성. ( 의무적인 인스턴스명 부여  )

 

     사용예( AS2.0 )

     var sample: MovieClip = container.attachMovie( "식별자", "인스턴트명", 뎁스 );

 

     - addChild : new를 통해서 인스턴트를 생성 후 Display Object간 관계 구성.

 

     사용예( AS3.0 ) 

     var sample: MovieClip = new 클래스();

     container.addChild( sample );

 

위 예제를 보면 알 수 있듯이 AS3.0 에서는 인스턴스 생성과 시각화시키는 부분을 분리시키므로써 조금 더 섬세하게 제어할 수 있습니다. 또한 불필요한 인스턴스명을 사용하는 것을 방지할 수 있기 때문에 메모리 관리 측면에서도 훨씬 효율적이라는걸 알 수 있습니다.

 

Display Object의 구성

 

먼저 Display Object구성에 대해 알려면 상속시스템에 대해 알아야 합니다. 상속이란 말을 많이 들어 보셨죠? '부모로 부터 재산을 받다'라는 개념정도로 생각하면 됩니다. 상속은 크게 2가지로 분류할 수 있습니다. has-a 상속과 is-a 상속입니다.

 

     일반적인 has-a 상속( 합성 )

     - 다른 사람이 가지고 있는 특정한 기능을 사용하고 싶을 때 구현.

     - new 키워드를 사용해서 인스턴스화 해서 사용.

     - 기능을 주는쪽과 받는 쪽 등호 비성립.

 

     Stage has-a 상속 개념 다이어 그램

 

     아래 그림을 보면 Display Object Container 가 Display Object Container를 포함하는 관계를 구성하고 있습니다.

     이렇게 스스로를 포함하는 프로그램 디자인 패턴을 Composite 디자인 패턴이라고 합니다.

     아래 다이어그램은 클래스 이름에 기초하지 않는 "개념적인 has-a 상속"이라고 이라고 할 수 있습니다.

 

 

 

 

     일반적인 is-a 상속

     - 자식이 부모의 기능을 모두 물려받아야 할 때 구현.

     - extends, implements 키워드를 사용해서 상속 받음.

     - 기능을 주는쪽과 받는 쪽 등호 성립.

 

     Display Object is-a 상속 다이어그램

 

     is-a 상속은 다시 일반 상속와 구현 상속으로 분류합니다.

     일반 상속은 'extends' 키우드를 통해서 클래스 관계를 정의.

     구현 상속은 'implements' 키워드를 통해서 클래스 관계를 정의.

     두개의 키워드를 동시에 사용하므로써 일반 상속과 구현 상속을 같이 구현할 수도 있습니다.

 

 

 

 

무비클립에 집중화 되어 있던 기능들을 상속시스템을 통해서 분리시킴으로써 객체를 시각화 시킬때 필요한 부분만 선택적으로 사용하므로써 불필요한 메모리 남용을 막을 수 있습니다. 또한 클래스간 관계가 명확하기 때문에 OOP 개발에 최적화된 시스템이라고 할 수 있겠습니다.

 

Display Object 클래스 구성이 복잡하기 때문에 좀 무거운 감은 있지만, 프로그램언어로써 손색없을 정도의 체제를 잡았다는데 만족합니다.