Error 클래스 비교

Flash Player 9 이상, Adobe AIR 1.0 이상

ActionScript에서는 미리 정의된 여러 가지 Error 클래스가 제공됩니다. 하지만 자체적으로 작성한 코드에서 동일한 Error 클래스를 사용할 수도 있습니다. ActionScript 3.0에는 두 가지 주요 Error 클래스 즉, ActionScript 핵심 Error 클래스 및 flash.error 패키지 Error 클래스가 있습니다. flash.error 패키지에는 ActionScript 3.0 응용 프로그램 개발 및 디버깅을 지원하기 위한 추가 클래스가 포함됩니다.

핵심 Error 클래스

핵심 Error 클래스에는 Error, ArgumentError, EvalError, RangeError, ReferenceError, SecurityError, SyntaxError, TypeError, URIError 및 VerifyError 클래스가 포함됩니다. 이 클래스는 각각 최상위 네임스페이스에 있습니다.

클래스 이름

설명

참고 사항

Error

Error 클래스는 예외 발생을 위한 것이며 ECMAScript(EvalError, RangeError, ReferenceError, SyntaxError, TypeError 및 URIError)에서 정의된 다른 예외 클래스에 대한 기본 클래스입니다.

Error 클래스는 모든 런타임 오류에 대해 기본 클래스 역할을 수행하며 모든 사용자 정의 오류 클래스에 대해 권장된 기본 클래스입니다.

ArgumentError

ArgumentError 클래스는 함수 호출 시 제공된 매개 변수 값이 해당 함수에 대해 정의된 매개 변수와 일치하지 않을 때 발생하는 오류를 나타냅니다.

인수 오류는 다음과 같은 상황에서 발생할 수 있습니다.

  • 메서드에 제공된 인수가 너무 적거나 너무 많은 경우

  • 인수가 열거된 항목에 속해야 하지만 아닌 경우

EvalError

EvalError 예외는 매개 변수가 Function 클래스의 생성자에 전달되거나 사용자 코드에서 eval() 함수를 호출할 경우 발생합니다.

ActionScript 3.0에서는 eval() 함수에 대한 지원이 없어져 이 함수를 사용하려고 하면 오류가 발생합니다.

이전 버전의 Flash Player에서는 eval() 함수를 사용하여 변수, 속성, 객체 또는 동영상 클립을 이름으로 액세스할 수 있었습니다.

RangeError

RangeError 예외는 숫자 값이 허용되는 범위를 벗어난 경우 발생합니다.

예를 들어 지연 시간이 음수이거나 유한수가 아닌 경우 Timer 클래스에서 RangeError가 발생합니다. 잘못된 심도에 표시 객체를 추가하려는 경우에도 RangeError가 발생할 수 있습니다.

ReferenceError

ReferenceError 예외는 봉인된 비동적 객체에서 정의되지 않은 속성을 참조하려고 하는 경우 발생합니다. ActionScript 3.0 이전의 ActionScript 컴파일러 버전에서는 undefined 속성에 액세스하려고 할 때 오류가 발생하지 않았습니다. 그러나 ActionScript 3.0에서는 이 경우 ReferenceError 예외가 발생합니다.

정의되지 않은 변수에 대한 예외는 잠재적인 버그를 식별할 수 있도록 해 주며 소프트웨어 품질을 향상시키는 데 도움이 됩니다. 하지만 변수를 초기화하는 데 익숙하지 않은 경우 이 새로운 ActionScript 비헤이비어로 인해 코딩 습관을 바꿔야 합니다.

SecurityError

SecurityError 예외는 보안 위반이 발생하여 액세스가 거부될 경우 발생합니다.

보안 오류는 다음과 같은 상황에서 발생할 수 있습니다.

  • 보안 샌드박스 경계를 벗어나 무단으로 속성에 액세스하거나 메서드를 호출하는 경우

  • 보안 샌드박스에서 허용되지 않는 URL에 액세스하는 경우

  • 필수 소켓 정책 파일이 없는 포트에 소켓 연결을 시도하는 경우

  • 사용자의 카메라 또는 마이크에 액세스하려는 시도가 있었으며, 사용자가 장치에 대한 액세스를 거부한 경우

SyntaxError

SyntaxError 예외는 ActionScript 코드에서 파싱 오류가 발생할 경우 발생합니다.

SyntaxError는 다음과 같은 상황에서 발생할 수 있습니다.

  • RegExp 클래스가 잘못된 일반 표현식을 파싱할 때 ActionScript가 SyntaxError 예외를 발생시키는 경우

  • XMLDocument 클래스가 잘못된 XML을 파싱할 때 ActionScript가 SyntaxError 예외를 발생시키는 경우

TypeError

피연산자의 실제 유형이 예상 유형과 다르면 TypeError 예외가 발생합니다.

TypeError는 다음과 같은 상황에서 발생할 수 있습니다.

  • 함수 또는 메서드의 실제 매개 변수를 형식 매개 변수 유형으로 강제 변환할 수 없는 경우

  • 변수에 할당된 값을 해당 변수의 유형으로 강제 변환할 수 없는 경우

  • is 또는 instanceof 연산자에서 오른쪽 객체의 유형이 잘못된 경우

  • super 키워드를 잘못 사용한 경우

  • 속성을 조회한 결과 여러 바인딩이 발견되어 결과가 모호한 경우

  • 호환되지 않는 객체에 메서드를 호출한 경우. 예를 들어 RegExp 클래스의 메서드를 일반 객체로 "이식"하여 호출하면 TypeError 예외가 발생합니다.

URIError

URIError 예외는 전역 URI 처리 함수 중 하나를 해당 정의와 호환되지 않는 방식으로 사용할 경우 발생합니다.

URIError는 다음과 같은 상황에서 발생할 수 있습니다.

Socket.connect() 와 같은 유효한 URI를 예상하는 Flash Player API 함수에 유효하지 않은 URI가 지정되는 경우

VerifyError

VerifyError 예외는 형식이 잘못되었거나 손상된 SWF 파일이 발견되는 경우 발생합니다.

SWF 파일이 다른 SWF 파일을 로드할 때 부모 SWF 파일은 로드된 SWF 파일에서 발생한 VerifyError를 catch할 수 있습니다.

flash.error 패키지 Error 클래스

flash.error 패키지에는 Flash 런타임 API의 일부인 Error 클래스가 포함됩니다. 설명한 Error 클래스와 달리 flash.error 패키지는 Flash 런타임(Flash Player, Adobe AIR 등)과 관련된 오류 이벤트를 전달합니다.

클래스 이름

설명

참고 사항

EOFError

EOFError 예외는 사용 가능한 데이터의 끝 부분을 지나 계속 읽으려고 하면 발생합니다.

예를 들어 IDataInput 인터페이스에서 읽기 메서드 중 하나가 호출되고 이 읽기 요청을 수행하기 위한 데이터가 부족한 경우 EOFError가 발생합니다.

IllegalOperationError

IllegalOperationError 예외는 메서드를 구현하지 않았거나 현재의 사용이 구현 범위에서 벗어나는 경우 발생합니다.

잘못된 작업 오류 예외는 다음과 같은 상황에서 발생할 수 있습니다.

  • DisplayObjectContainer와 같은 기본 클래스에서 스테이지에서 지원할 수 있는 것보다 많은 기능을 제공하는 경우. 예를 들어 스테이지에서 마스크를 가져오거나 설정하려고 할 경우( stage.mask 사용) Flash 런타임에서 "Stage 클래스는 이 속성이나 메서드를 구현하지 않습니다."라는 메시지와 함께 IllegalOperationError를 throw합니다.

  • 하위 클래스에서 필요하지 않으며 지원하기를 원치 않는 메서드를 상속하는 경우

  • 액세스 가능성 기능 지원 없이 Flash Player가 컴파일되었을 때 특정 액세스 가능성 메서드가 호출되는 경우

  • Flash Player의 런타임 버전에서 제작 전용 기능이 호출된 경우

  • 타임라인에 있는 객체의 이름을 설정하려고 한 경우

IOError

IOError 예외는 일부 I/O 예외 유형이 발생할 경우 발생합니다.

예를 들어 연결되지 않았거나 연결이 해제된 소켓에서 읽기/쓰기 작업을 시도한 경우 IOError 예외가 발생합니다.

MemoryError

MemoryError 예외는 메모리 할당 요청이 실패하면 발생합니다.

기본적으로 ActionScript Virtual Machine 2는 ActionScript 프로그램에서 할당할 수 있는 메모리 크기에 제한을 두지 않습니다. 데스크톱 시스템에서는 메모리 할당에 실패하는 경우가 드물지만, 시스템에서 작업에 필요한 메모리를 할당할 수 없을 경우 이 오류가 발생합니다. 그러므로 데스크톱 시스템에서 이 예외는 극도로 큰 메모리 할당을 요청하는 경우가 아니면 발생하지 않습니다. 예를 들어 32비트 Microsoft® Windows® 프로그램의 경우 액세스할 수 있는 주소 공간이 2GB로 제한되므로 30억 바이트 요청은 불가능합니다.

ScriptTimeoutError

ScriptTimeoutError 예외는 15초 스크립트 타임아웃 간격에 도달할 경우 발생합니다. ScriptTimeoutError 예외를 catch하면 스크립트 타임아웃을 보다 적절하게 처리할 수 있습니다. 예외 핸들러가 없는 경우 catch되지 않는 예외 핸들러에서 오류 메시지와 함께 대화 상자를 표시합니다.

악의적 개발자가 예외를 catch하여 무한 루프를 유지하는 것을 방지하기 위해, 특정 스크립트 동안 발생한 첫 번째 ScriptTimeoutError 예외만 catch할 수 있습니다. 이후의 ScriptTimeoutError 예외는 코드에서 catch할 수 없으며 catch되지 않는 예외 핸들러로 바로 전달됩니다.

StackOverflowError

StackOverflowError 예외는 스크립트에 사용할 수 있는 스택이 소진된 경우 발생합니다.

StackOverflowError 예외는 무한 재귀가 발생했음을 나타낼 수 있습니다.