클래스 속성 특성

ActionScript 객체 모델에서 속성이라는 용어는 변수, 상수 및 메서드 등 클래스의 멤버가 될 수 있는 모든 항목을 나타냅니다. 이 용어는 해당 용어를 보다 좁은 의미로 사용하여 변수이거나 getter 또는 setter 메서드로 정의되는 클래스 멤버만 나타내는 ActionScript 3.0 언어 및 구성 요소 참조 설명서의 경우와 다른 방식으로 사용됩니다. ActionScript 3.0에는 클래스의 모든 속성과 함께 사용할 수 있는 특성 집합이 있습니다. 다음 표에 이러한 특성들이 나열되어 있습니다.

특성

정의

internal(기본값)

같은 패키지 내에서 참조할 수 있습니다.

private

같은 클래스에서 참조할 수 있습니다.

protected

같은 클래스 및 파생 클래스에서 참조할 수 있습니다.

public

모든 위치에서 참조할 수 있습니다.

static

속성이 클래스의 인스턴스가 아니라 클래스에 속하도록 지정합니다.

UserDefinedNamespace

사용자 정의 네임스페이스 이름입니다.

세부 목차

액세스 제어 네임스페이스 특성
static 특성
사용자 정의 네임스페이스 특성

액세스 제어 네임스페이스 특성

ActionScript 3.0에서는 클래스 내에 정의된 속성에 대한 액세스를 제어하는 네 가지 특수 특성인 public, private, protectedinternal이 제공됩니다.

public 특성을 사용하면 스크립트의 모든 위치에서 속성을 참조할 수 있습니다. 예를 들어, 해당 패키지 외부의 코드에서 메서드를 사용할 수 있게 하려면 메서드를 public 특성으로 선언해야 합니다. 이는 var, const 또는 function 등 속성을 정의하는 데 사용된 키워드에 관계없이 모든 속성에서 마찬가지입니다.

private 특성을 사용하면 해당 속성이 정의된 클래스 내에서만 속성에 액세스할 수 있습니다. 이 private 특성의 비헤이비어는 ActionScript 2.0에서 하위 클래스가 수퍼 클래스의 전용 속성에 액세스하도록 허용했던 비헤이비어와는 다릅니다. 또한 런타임 액세스 비헤이비어에도 중요한 차이점이 있습니다. ActionScript 2.0에서는 private 키워드를 사용하면 컴파일 타임에만 액세스가 금지되었고 런타임에는 이러한 제한을 쉽게 피할 수 있었습니다. ActionScript 3.0에서는 더 이상 그렇지 않습니다. private으로 표시된 속성은 컴파일 타임과 런타임 시 모두 사용할 수 없습니다.

예를 들어, 다음 코드에서는 전용 변수 하나가 있는 PrivateExample이라는 간단한 클래스를 만든 다음 클래스 외부에서 전용 변수에 액세스합니다. ActionScript 2.0의 경우 컴파일 타임 액세스는 금지되지만, 컴파일 타임이 아닌 런타임에 속성을 조회하는 속성 액세스 연산자([])를 사용하여 이러한 제한을 쉽게 피할 수 있었습니다.

class PrivateExample
{
    private var privVar:String = "private variable";
}

var myExample:PrivateExample = new PrivateExample();
trace(myExample.privVar);    // Strict 모드에서 컴파일 시 오류가 발생합니다.
trace(myExample["privVar"]); // ActionScript 2.0에서는 액세스가 허용되지만 ActionScript 3.0에서는 런타임 오류가 발생합니다. 

ActionScript 3.0의 경우 myExample.privVar과 같이 도트 연산자를 사용하여 전용 속성에 액세스하려고 하면 Strict 모드를 사용하는 경우 컴파일 타임 오류가 발생합니다. 그렇지 않은 경우에는 myExample["privVar"]과 같이 속성 액세스 연산자를 사용한 경우처럼 런타임에 오류가 보고됩니다.

다음 표에서는 동적이 아닌 봉인 클래스에 속한 전용 속성에 액세스한 결과를 보여 줍니다.

Strict 모드

Standard 모드

도트 연산자(.)

컴파일 타임 오류

런타임 오류

대괄호 연산자([])

런타임 오류

런타임 오류

dynamic 특성으로 선언된 클래스의 경우에는 전용 변수에 액세스해도 런타임 오류가 발생하지 않습니다. 대신 변수를 참조할 수 없으므로 Flash Player에서 undefined 값이 반환됩니다. 그러나 Strict 모드에서 도트 연산자를 사용하면 컴파일 타임 오류가 발생합니다. 다음 예제는 이전 예제와 동일하지만 PrivateExample 클래스가 동적 클래스로 선언됩니다.

dynamic class PrivateExample
{
    private var privVar:String = "private variable";
}

var myExample:PrivateExample = new PrivateExample();
trace(myExample.privVar);    // Strict 모드에서 컴파일 시 오류가 발생합니다.
trace(myExample["privVar"]); // 출력: undefined

동적 클래스를 사용하면 클래스 외부 코드에서 전용 속성에 액세스할 때 일반적으로 오류가 발생하는 대신 undefined 값이 반환됩니다. 다음 표를 보면 Strict 모드에서 도트 연산자를 사용하여 전용 속성에 액세스할 때만 오류가 발생함을 알 수 있습니다.

Strict 모드

Standard 모드

도트 연산자(.)

컴파일 타임 오류

undefined

대괄호 연산자([])

undefined

undefined

ActionScript 3.0에서 새로 도입된 protected 특성을 사용하면 자체 클래스나 하위 클래스에서 속성에 액세스할 수 있습니다. 즉, protected 속성은 자체 클래스 내에서 또는 상속 계층 구조에서 해당 클래스 아래쪽에 있는 모든 클래스에서 사용할 수 있습니다. 하위 클래스가 수퍼 클래스와 같은 패키지에 있는지 또는 다른 패키지에 있는지에 관계없이 하위 클래스에서 protected 속성을 사용할 수 있습니다.

ActionScript 2.0에 익숙한 사용자에게 이 기능은 ActionScript 2.0의 private 특성과 비슷합니다. ActionScript 3.0의 protected 특성은 Java의 protected 특성과도 비슷하지만 Java 버전의 경우 같은 패키지 내에 있는 호출자도 액세스할 수 있다는 차이점이 있습니다. protected 특성은 하위 클래스에 필요한 변수 또는 메서드를 상속 체인 외부에 있는 코드로부터 숨기려는 경우에 유용합니다.

ActionScript 3.0에서 새로 도입된 internal 특성을 사용하면 자체 패키지 내에서 속성을 호출할 수 있습니다. 이는 패키지 안에 있는 코드의 기본 특성이며 다음 특성이 지정되지 않은 모든 속성에 적용됩니다.

internal 특성은 Java의 기본 액세스 제어와 비슷하지만 Java의 경우에는 이 액세스 수준에 명시적으로 지정된 이름이 없으며 이 액세스 수준을 사용하려면 다른 액세스 수식어를 모두 생략해야 합니다. ActionScript 3.0에서 internal 특성을 사용하면 자체 패키지 내에서만 속성을 호출하도록 하려는 의도를 명시적으로 나타낼 수 있습니다.

static 특성

var, const 또는 function 키워드로 선언된 속성에 사용할 수 있는 static 특성을 통해 속성을 클래스의 인스턴스가 아닌 클래스 자체에 연결할 수 있습니다. 클래스 외부의 코드에서 정적 속성을 호출하려면 인스턴스 이름 대신 클래스 이름을 사용해야 합니다.

정적 속성은 하위 클래스로 상속되지는 않지만 하위 클래스의 범위 체인에 포함됩니다. 즉, 하위 클래스의 본문 내에서는 정적 변수 또는 메서드가 정의된 클래스를 참조하지 않고도 해당 변수 또는 메서드를 사용할 수 있습니다. 자세한 내용은 상속되지 않는 정적 속성을 참조하십시오.

사용자 정의 네임스페이스 특성

미리 정의된 액세스 제어 특성을 사용하는 대신 사용자 정의 네임스페이스를 만들어 특성으로 사용할 수 있습니다. 네임스페이스 특성은 정의마다 하나만 사용할 수 있으며 액세스 제어 특성(public, private, protected, internal)과는 함께 사용할 수 없습니다. 네임스페이스를 사용법에 대한 자세한 내용은 네임스페이스를 참조하십시오.


Flash CS3

 

이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서

현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000062.html