언어 개요

객체는 ActionScript 3.0 언어의 핵심 개념이며 기본적인 구성 단위입니다. 객체는 선언된 모든 변수, 작성된 모든 함수 및 만들어진 모든 클래스 인스턴스입니다. ActionScript 3.0 프로그램은 작업을 수행하고 이벤트에 응답하고 서로 통신하는 객체의 그룹으로 간주할 수 있습니다.

Java 또는 C++의 OOP(객체 지향 프로그래밍)에 익숙한 프로그래머는 객체를 두 가지 멤버가 포함된 모듈로 생각할 수 있습니다. 즉, 데이터는 멤버 변수나 속성에 저장되고 비헤이비어는 메서드를 통해 액세스할 수 있는 것으로 생각할 수 있습니다. ActionScript 3.0에서는 이와 비슷하지만 약간 다른 방식으로 객체를 정의합니다. ActionScript 3.0에서 객체는 단지 속성 모음일 뿐입니다. 이러한 속성은 데이터뿐만 아니라 함수 또는 다른 객체도 저장할 수 있는 컨테이너입니다. 이 방식으로 객체에 연결되는 함수를 메서드라고 합니다.

Java 또는 C++에 대한 지식이 있는 프로그래머에게는 ActionScript 3.0의 정의가 조금 이상하게 보일 수도 있지만 실제로 ActionScript 3.0 클래스를 사용하여 객체 유형을 정의하는 것은 Java 또는 C++로 클래스를 정의하는 방식과 매우 유사합니다. ActionScript 객체 모델과 기타 고급 항목을 설명하는 경우에는 두 객체 정의를 구분하는 것이 중요하지만 대부분의 경우 속성이라는 용어는 메서드가 아닌 클래스 멤버 변수를 의미합니다. 예를 들어 Adobe ActionScript 3.0 Reference for the Adobe Flash Platform에서 속성이라는 용어는 변수 또는 getter-setter 속성을 의미하는 데 사용됩니다. 메서드라는 용어는 클래스의 일부인 함수를 의미합니다.

Java 또는 C++와 달리 ActionScript에서는 클래스가 추상적인 엔터티만은 아니라는 미묘한 차이점이 있습니다. ActionScript 클래스는 클래스의 속성과 메서드를 저장하는 클래스 객체로 구체화됩니다. 이로 인해 클래스 또는 패키지의 최상위에서 명령문이나 실행 코드를 포함하는 등 Java 및 C++ 프로그래머에게는 생소할 수 있는 기법을 사용하는 것이 가능합니다.

ActionScript 클래스와 Java 또는 C++ 클래스 간의 또 다른 차이점은 모든 ActionScript 클래스에는 프로토타입객체가 있다는 점입니다. 이전 버전의 ActionScript에서는 여러 프로토타입 객체를 프로토타입 체인에 함께 연결하여 전체 클래스 상속 계층 구조의 기초로 제공했습니다. 그러나 ActionScript 3.0의 상속 시스템에서는 프로토타입 객체가 작은 역할만 담당합니다. 비록 역할이 축소되기는 했지만 클래스의 모든 인스턴스에서 속성과 해당 값을 공유하려는 경우 이전처럼 프로토타입 객체를 정적 속성 및 메서드 대신 사용할 수 있습니다.

이전에는 고급 ActionScript 프로그래머가 특수 내장 언어 요소를 사용하여 프로토타입 체인을 직접 조작할 수 있었습니다. 이제 클래스 기반 프로그래밍 인터페이스의 구현이 더욱 향상되어 __proto____resolve 등 많은 특수 언어 요소가 더 이상 언어에 포함되지 않습니다. 또한 내부 상속 메커니즘을 최적화한 결과 성능은 크게 향상되었지만 상속 메커니즘에 직접 액세스할 수 없게 되었습니다.