WonHada.com으로 이전

에러(Error) 처리 1 본문

플래시/플렉스[Flash/Flex]

에러(Error) 처리 1

반주부 2007. 11. 15. 12:29
반응형


에러는 컴파일, 런타임, 동기, 비동기 및 알 수 없는 경우에 발생합니다..

AS 3.0에서는 ECMAScript (ECMA-262) Edition 4 에 준하는 새로운 Error 클래스를 제공하고 있는데요..각종 에러 처리와 사용자가 새롭게 정의한 에러 클래스(Custom Error Class)를 사용할 수 있습니다..

일단 에러를 발생시켜 보죠..

=============================================
var str:String;
trace(str.length);
=============================================

실행하면..

사용자 삽입 이미지

위와 같이 간단한 구문만으로도 오류창을 볼 수 있는데요..str 변수가 null이기 때문에 length를 구할 수가 없게 됩니다..에러죠..

다른 경우를 한번 살펴보겠습니다..아래는 외부의 txt 파일을 로드해서 변수와 값을 구하는 구문입니다..

============================================
로드할 파일명 : loadTest.txt
내용 : &testStr=에러테스트
=============================================
import flash.net.*;

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, on_Load);
loader.load(new URLRequest("loadTest.txt"));

function on_Load(event:Event):void {
 var loader:URLLoader = URLLoader(event.currentTarget);
 var variables:URLVariables = new URLVariables(loader.data);
 var str:String = variables.testStr;
 trace(str.length);
}
=============================================

실행하면..

사용자 삽입 이미지

에러가 납니다..AS 1.0 / 2.0 때와는 다르게 처음 변수앞에 "&"를 붙이면 에러가 납니다..
가끔 외주받은 업체에서 이벤트 문구등을 수정하기 편하게 txt 파일로 만들어 달라고 할때가 있는데요..그때 위와 같은 실수로 인해 오류가 날 수 있겠죠?

그럼 위와 같은 경우를 방지하려면 어떻게 해야할까요?

다른 방법도 있지만..학습을 위해 에러잡는 멋진남자 try를 써보도록 하죠..

try..catch..finally 스테이트먼트를 사용하면 에러를 멋지게 잡아내고 오류창을 뜨지 않게 할 수 있습니다..

그럼, 위 오류 코드를 잡아볼까요?

=============================================
//위쪽 구문은 똑같습니다..

function on_Load(event:Event):void {
 var loader:URLLoader = URLLoader(event.currentTarget);
 var variables:URLVariables;
 try {
  variables = new URLVariables(loader.data);
  var str:String = variables.testStr;
 } catch (e:Error) {
  //에러가 발생할 경우 처리
  var tmpStr:String = loader.data;
  if (tmpStr.charAt(0) == "&") {
   tmpStr = tmpStr.substr(1);
   variables = new URLVariables(tmpStr);
   var str:String = variables.testStr;
  }
 } finally {
  trace(str.length);
 }
}
=============================================

try로 일단 실행하고 에러가 있으면 catch로 잡아내고, 에러가 있든 없든 finally를 마지막에 실행합니다..

위 코드는 에러가 날 경우 문자열의 처음에 있는 "&"를 제거하는거죠..그럼 제대로 실행이 되겠죠?

AS 3.0 문서에 따르면..

'try..catch..finally 에 의한 에러 처리 리소스량은, ActionScript의 이전 버젼과 동등 또는 조금 증가하는 정도'

라고 합니다..그러니 에러가 의심되는 구문에는 꼭 try를 써주세요..유저가 오류창을 보구서 깜짝 놀라지 않게 말이죠^^

다음에는 '사용자가 새롭게 정의한 에러 클래스(Custom Error Class)'에 대해 알아보겠습니다..










반응형