var valueInt :int = 0; var valueObject :Object = valueInt; trace( valueObject == "" ); trace( valueObject == 0 );
이렇게 코딩을 했을 때 어떻게 나올까? 답은 true true이다. int타입이고 값이 0인데 왜 빈칸( "" )과의 비교가 왜 true가 나오는 걸까? 저번에 쓴 "String타입 "false"를 Boolean타입으로 변환하는 방법"에 적어놓은 이유와 같다. 이 포스트에서 좀 더 자세히 풀자면, Flex는 Java와 다르게 Boolean 이외의 타입으로도 논리연산이 가능하다. 이 기능은 양날의 검으로 어떻게 보면 편하고 어떻게 보면 불편한 기능이다. 개인적으로는 안 쓰고 버그 안 나는 게 좋은 것 같다. 다음 코드를 보자.
if( 0 ) { trace( "true" ); } else { trace( "false" ); }
이렇게 했을 때 콘솔에 나오는 값은? 역시 답은 false이다. Java에서는 컴파일 조차 안 되는 문법이 Flex에서는 가능하다. JavaScript나 다른 스크립트들을 사용해본 사람들은 이 방법이 좀 더 유연하고 편한 방법이라고 생각할지 모르겠다. 그럼 또 다른 코드를 보자.
if( "" ) { trace( "true" ); } else { trace( "false" ); }
아까와 같은 코드에서 조건문에 들어가는 부분을 0에서 빈칸( "" )으로 변경했다. 나오는 값은? 역시 false. int타입에서 0은 false이고 그 외의 값은 true인 것처럼 String타입에서도 빈칸( "" )은 false인 것이다. int타입과 한 가지 다른 점은 String은 null이 가능하기 때문에 null 또한 false가 된다.
결론은 int타입이나 String타입 등 여러 타입들을 Object타입으로 받은 뒤에 조건문을 사용할 때 0 == ""이 true가 되지 않게 하기 위해서는 해당 변수의 타입검사를 해야할 것이다.( is, getQualifiedClassName() 등의 키워드나 메소드 사용 )
'Development > WebApp' 카테고리의 다른 글
[Flex] 개발할 때 주의할 점 중 클래스명이나 이미지명 같을 때 발생하는 문제 (0) | 2015.07.25 |
---|---|
[Flex] StringUtil.substitude() 사용법 (0) | 2015.06.08 |
[Flex] String타입 "false"를 Boolean타입으로 변환하는 방법 (0) | 2015.04.24 |
[Flex] 개행 문자 문제 (0) | 2015.04.17 |
[Flex] Error creating AIR file:xxx: error 103: application.versionNumber is an unexpected element/attribute (0) | 2015.04.16 |