오류 유형
Flash Player 9 이상, Adobe AIR 1.0 이상
응용 프로그램을 개발하고 실행할 때 다양한 오류 유형 및 오류 용어를 접하게 됩니다. 다음 목록은 주요 오류 유형 및 용어에 대한 설명입니다.
-
컴파일 시간 오류
: 코드 컴파일 중 ActionScript 컴파일러에서 발생합니다. 컴파일 시간 오류는 코드의 구문 문제로 인해 응용 프로그램을 제대로 빌드하지 못할 때 발생합니다.
-
런타임 오류
: 컴파일 후 응용 프로그램을 실행할 때 발생합니다. 런타임 오류는 SWF 파일이 Flash 런타임(Adobe Flash Player 또는 Adobe AIR)에서 재생될 때 발생하는 오류를 나타냅니다. 대부분의 경우 런타임 오류가 발생하면 사용자에게 오류 내용을 보고하고 응용 프로그램 실행을 유지하기 위한 절차를 수행하여 오류를 처리합니다. 원격 웹사이트에 연결할 수 없거나 필수 데이터를 로드할 수 없는 등 치명적 오류일 경우 오류 처리를 사용하여 응용 프로그램을 적절하게 종료할 수 있습니다.
-
동기 오류
: 함수 호출 시 발생하는 런타임 오류입니다. 예를 들어 특정 메서드를 사용하려고 할 때 이 메서드로 전달한 인수가 유효하지 않은 경우 Flash 런타임에서 예외를 throw합니다. 대부분의 오류는 명령문 실행 시 동기적으로 발생하며, 가장 적합한
catch
문으로 제어의 흐름이 즉시 전달됩니다.
예를 들어 다음 코드 예제에서는 프로그램에서 파일 업로드를 시도하기 전에
browse()
메서드가 호출되지 않아 런타임 오류가 발생합니다.
var fileRef:FileReference = new FileReference();
try
{
fileRef.upload(new URLRequest("http://www.yourdomain.com/fileupload.cfm"));
}
catch (error:IllegalOperationError)
{
trace(error);
// Error #2037: Functions called in incorrect sequence, or earlier
// call was unsuccessful.
}
이 경우 Flash Player에서 파일 업로드를 시도하기 전에
browse()
메서드가 호출되지 않았음을 확인하므로 런타임 오류가 동기적으로 발생합니다.
동기 오류 처리에 대한 자세한 내용은
응용 프로그램에서 동기 오류 처리
를 참조하십시오.
-
비동기
오류
는 정상적인 프로그램 흐름을 벗어나 발생하는 런타임 오류로, 이벤트를 발생시키고 이벤트 리스너는 이를 catch합니다. 비동기 작업은 함수에서 작업을 시작하지만 완료될 때까지 기다리지 않는 작업입니다. 이때 오류 이벤트 리스너를 만들어 응용 프로그램이나 사용자가 특정 작업을 시도할 때까지 기다릴 수 있으며 작업에 실패할 경우 이벤트 리스너로 오류를 catch하여 오류 이벤트에 응답할 수 있습니다. 그러면 이벤트 리스너는 이벤트 핸들러 함수를 호출하여 오류 이벤트에 적절하게 응답합니다. 예를 들어 이벤트 핸들러는 사용자에게 오류를 해결하도록 하는 대화 상자를 표시할 수 있습니다.
앞에서 설명했던 파일 업로드 동기 오류를 살펴봅니다. 파일 업로드를 시작하기 전에
browse()
메서드를 성공적으로 호출한 경우 Flash Player에서 여러 이벤트를 전달하게 됩니다. 예를 들어 업로드가 시작되면
open
이벤트가 전달됩니다. 그리고 파일 업로드 작업이 성공적으로 완료되면
complete
이벤트가 전달됩니다. 이벤트 처리는 비동기적이므로(즉, 특정 시간, 알려진 시간 또는 미리 지정된 시간에 발생하지 않음) 다음 코드와 같이 이러한 특정 이벤트를 수신하려면
addEventListener()
메서드를 사용합니다.
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.OPEN, openHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.browse();
function selectHandler(event:Event):void
{
trace("...select...");
var request:URLRequest = new URLRequest("http://www.yourdomain.com/fileupload.cfm");
request.method = URLRequestMethod.POST;
event.target.upload(request);
}
function openHandler(event:Event):void
{
trace("...open...");
}
function completeHandler(event:Event):void
{
trace("...complete...");
}
비동기 오류 처리에 대한 자세한 내용은
오류 이벤트 및 상태에 응답
을 참조하십시오.
-
catch되지 않는 예외
: 오류에 응답하기 위한 해당 논리(예:
catch
문)가 없을 때 발생하는 오류입니다. 응용 프로그램에서 오류가 발생하고 현재 또는 상위 수준에 오류를 처리할 수 있는 적합한
catch
문이나 이벤트 핸들러가 없는 경우 이 오류는 catch되지 않는 예외로 간주됩니다.
catch되지 않는 오류가 발생하면 런타임이
uncaughtError
이벤트를 전달합니다. 이 이벤트를 "전역 오류 핸들러"라고도 합니다. 이 이벤트는
LoaderInfo.uncaughtErrorEvents
속성을 통해 사용 가능한 SWF의 UncaughtErrorEvents 객체에 의해 전달됩니다.
uncaughtError
이벤트에 대해 등록된 리스너가 없는 경우 런타임이 catch되지 않는 오류를 무시하고 오류로 인해 SWF가 중지되지 않는 한 실행을 계속하려고 시도합니다.
디버거 버전의 Flash 런타임은
uncaughtError
이벤트를 전달하는 것 외에도 현재 스크립트를 종료하여 catch되지 않는 오류에 응답합니다. 그런 다음 catch되지 않는 오류를
trace
명령문 출력에 표시하거나 오류 메시지를 로그 파일에 기록합니다. 예외 객체가 Error 클래스 또는 해당 하위 클래스 중 하나의 인스턴스인 경우 출력에 스택 추적 정보도 표시됩니다. Flash 런타임의 디버거 버전 사용에 대한 자세한 내용은
Flash 런타임의 디버거 버전 작업
을 참조하십시오.
참고:
uncaughtError 이벤트를 처리하는 동안 uncaughtError 핸들러에서 error 이벤트가 발생하면 이벤트 핸들러가 여러 번 호출됩니다. 이 경우 예외가 무한 반복되므로 이러한 상황이 일어나지 않도록 주의해야 합니다.
|
|
|