클래스와 열거형

열거형은 소규모 값 집합을 캡슐화하기 위해 만드는 사용자 정의 데이터 유형입니다. ActionScript 3.0에서는 C++의 enum 키워드나 Java의 Enumeration 인터페이스와 같은 구체적인 열거형 기능이 지원되지 않습니다. 그러나 클래스와 정적 상수를 사용하여 열거형을 만들 수 있습니다. 예를 들어 Flash Player API의 PrintJob 클래스에서는 PrintJobOrientation이라는 열거형을 사용하여 다음 코드와 같이 "landscape""portrait"으로 구성된 값 집합을 저장합니다.

public final class PrintJobOrientation
{
    public static const LANDSCAPE:String = "landscape";
    public static const PORTRAIT:String = "portrait";
}

열거형 클래스는 확장할 필요가 없으므로 관습적으로 final 특성으로 선언됩니다. 이러한 클래스는 정적 멤버만으로 구성되므로 클래스의 인스턴스를 만들 수 없습니다. 대신 다음 인용 코드와 같이 클래스 객체를 직접 사용하여 열거형 값에 액세스합니다.

var pj:PrintJob = new PrintJob();
if(pj.start())
{                
    if (pj.orientation == PrintJobOrientation.PORTRAIT)
    {
        ...
    }
    ...
}

Flash Player API의 모든 열거형 클래스에는 String, int 또는 uint 유형의 변수만 들어 있습니다. 리터럴 문자열이나 숫자 값 대신 열거형을 사용하면 철자를 잘못 입력한 오류를 쉽게 찾을 수 있다는 장점이 있습니다. 열거형의 이름을 잘못 입력하면 ActionScript 컴파일러에서 오류가 발생합니다. 리터럴 값을 사용하면 단어의 철자를 잘못 입력하거나 숫자를 잘못 입력해도 컴파일러에서 메시지가 표시되지 않습니다. 이전 예제의 경우 다음 인용 코드와 같이 열거형 상수 이름을 잘못 입력하면 컴파일러에서 오류가 발생합니다.

    if (pj.orientation == PrintJobOrientation.PORTRAI) // 컴파일러 오류

그러나 다음과 같이 문자열 리터럴 값을 잘못 입력한 경우에는 컴파일러에서 오류가 발생하지 않습니다.

    if (pj.orientation == "portrai") // 컴파일러 오류 없음

열거형을 만드는 두 번째 방법에서도 열거형에 사용할 정적 속성이 있는 별도의 클래스를 만듭니다. 그러나 두 번째 방법은 각 정적 속성에 문자열 또는 정수 값 대신 클래스 인스턴스가 포함된다는 점이 다릅니다. 예를 들어, 다음 코드에서는 요일에 대한 열거형 클래스를 만듭니다.

public final class Day
{
    public static const MONDAY:Day = new Day();
    public static const TUESDAY:Day = new Day();
    public static const WEDNESDAY:Day = new Day();
    public static const THURSDAY:Day = new Day();
    public static const FRIDAY:Day = new Day();
    public static const SATURDAY:Day = new Day();
    public static const SUNDAY:Day = new Day();
}

Flash Player API에는 이 기술이 사용되지 않지만, 이 기술을 통해 제공되는 향상된 유형 확인을 선호하는 많은 개발자는 이 기술을 사용하고 있습니다. 예를 들어, 열거형 값을 반환하는 메서드에서는 반환 값을 열거형 데이터 유형으로 제한할 수 있습니다. 다음 코드에서는 요일을 반환하는 함수뿐만 아니라 열거형을 유형 약어로 사용하는 함수 호출도 보여 줍니다.

function getDay():Day
{
    var date:Date = new Date();
    var retDay:Day;
    switch (date.day)
    {
        case 0:
            retDay = Day.MONDAY;
            break;
        case 1:
            retDay = Day.TUESDAY;
            break;
        case 2:
            retDay = Day.WEDNESDAY;
            break;
        case 3:
            retDay = Day.THURSDAY;
            break;
        case 4:
            retDay = Day.FRIDAY;
            break;
        case 5:
            retDay = Day.SATURDAY;
            break;
        case 6:
            retDay = Day.SUNDAY;
            break;
    }
    return retDay;
}

var dayOfWeek:Day = getDay();

Day 클래스를 개선하여 각 요일을 정수에 연결하고 문자열로 나타낸 요일을 반환하는 toString() 메서드를 제공할 수도 있습니다. 연습을 위해 Day 클래스를 이러한 방식으로 개선해 볼 수 있습니다.


Flash CS3

 

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

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