유형 변환

어떤 값이 다른 데이터 유형의 값으로 변형되면 유형 변환이 발생한다고 합니다. 유형 변환은 암시적 또는 명시적으로 수행될 수 있습니다. 강제 형 변환이라고도 하는 암시적 변환이 런타임에 Flash Player에서 수행되는 경우도 있습니다. 예를 들어, Boolean 데이터 유형에 값 2를 지정하면 변수에 값을 지정하기 전에 Flash Player에서 값 2를 부울 값인 true로 변환합니다. 컴파일러가 특정 데이터 유형의 변수를 다른 데이터 유형의 변수로 처리하도록 코드에서 지정하면 형 변환이라는 명시적 변환이 발생합니다. 프리미티브 값이 포함되어 있으면 형 변환에 의해 실제로 한 데이터 유형에서 다른 데이터 유형으로 값이 변환됩니다. 객체를 다른 유형으로 변환하려면 객체 이름을 괄호로 묶고 그 앞에 새 유형의 이름을 붙여야 합니다. 예를 들어 다음 코드에서는 부울 값을 전달 받아 정수로 변환합니다.

var myBoolean:Boolean = true;
var myINT:int = int(myBoolean);
trace(myINT); // 1

세부 목차

암시적 변환
명시적 변환
int, uint 및 Number로 형 변환
Boolean으로 변환
String으로 변환

암시적 변환

런타임에 암시적 변환이 발생하는 몇 가지 경우는 다음과 같습니다.

사용자 정의 유형의 경우 변환할 값이 대상 클래스 또는 대상 클래스에서 파생된 클래스의 인스턴스이면 암시적 변환이 이루어집니다. 암시적 변환에 실패하면 오류가 발생합니다. 예를 들어, 다음 코드에는 성공적인 암시적 변환과 실패한 암시적 변환이 포함되어 있습니다.

class A {}
class B extends A {}

var objA:A = new A();
var objB:B = new B();
var arr:Array = new Array();

objA = objB; // 변환이 성공합니다.
objB = arr; // 변환이 실패합니다.

프리미티브 유형의 경우 명시적 변환 함수에서 호출하는 내부 변환 알고리즘과 동일한 알고리즘을 호출하여 암시적 변환을 처리합니다. 다음 단원에서 이러한 프리미티브 유형 변환에 대해 자세히 설명합니다.

명시적 변환

Strict 모드에서 컴파일할 때 유형 불일치로 인해 컴파일 타임 오류가 발생하지 않도록 하려면 명시적 변환 또는 형 변환을 사용하는 것이 도움이 됩니다. 강제 형 변환이 런타임에 값을 올바르게 변환한다는 것을 알고 있는 경우를 가정해 봅시다. 예를 들어, 양식에서 전달된 데이터를 처리하는 경우 특정 문자열 값을 숫자 값으로 변환하기 위해 강제 형 변환을 사용할 수 있습니다. 다음 코드는 Standard 모드에서 올바르게 실행되지만 컴파일 타임에 오류가 발생합니다.

var quantityField:String = "3";
var quantity:int = quantityField; // Strict 모드에서 컴파일 시 오류가 발생합니다.

계속해서 Strict 모드를 사용하면서 문자열이 정수로 변환되도록 하려면 다음과 같이 명시적 변환을 사용할 수 있습니다.

var quantityField:String = "3";
var quantity:int = int(quantityField); // 명시적 변환이 성공합니다.

int, uint 및 Number로 형 변환

모든 데이터 유형을 int, uint 및 Number 등의 숫자 유형 중 하나로 변환할 수 있습니다. 어떤 이유로 Flash Player에서 숫자를 변환할 수 없는 경우 int 및 uint 데이터 유형에 기본값으로 0이 지정되고 Number 데이터 유형에는 기본값으로 NaN이 지정됩니다. 부울 값을 숫자로 변환하면 true는 값 1이 되며 false는 값 0이 됩니다.

var myBoolean:Boolean = true;
var myUINT:uint = uint(myBoolean);
var myINT:int = int(myBoolean);
var myNum:Number = Number(myBoolean);
trace(myUINT, myINT, myNum); // 1 1 1
myBoolean = false;
myUINT = uint(myBoolean);
myINT = int(myBoolean);
myNum = Number(myBoolean);
trace(myUINT, myINT, myNum); // 0 0 0

숫자만 포함된 문자열 값을 숫자 유형 중 하나로 변환할 수 있습니다. 음수 형태의 문자열 또는 16진수 값(예: 0x1A)을 나타내는 문자열도 숫자 유형으로 변환할 수 있습니다. 변환 과정에서 문자열 값에 있는 선행 또는 후행 공백 문자는 무시됩니다. Number()를 사용하여 부동 소수점 숫자 형태의 문자열을 변환할 수도 있습니다. 소수점이 포함된 문자열을 uint()int()에 전달하면 소수점과 그 뒤의 문자를 잘라내고 정수를 반환합니다. 예를 들어 다음 문자열 값을 숫자로 변환할 수 있습니다.

trace(uint("5"));     // 5
trace(uint("-5"));    // 4294967291. MAX_VALUE에서 처음부터 다시 시작됩니다.
trace(uint(" 27 "));  // 27
trace(uint("3.7"));   // 3
trace(int("3.7"));    // 3
trace(int("0x1A"));   // 26
trace(Number("3.7")); // 3.7

숫자가 아닌 문자가 포함된 문자열 값을 int() 또는 uint()로 변환하면 0이 반환되고 Number()로 변환하면 NaN이 반환됩니다 변환 과정에서 선행 또는 후행 공백 문자는 무시되지만 문자열에 두 개의 숫자를 구분하는 공백이 있는 경우 0 또는 NaN을 반환합니다.

trace(uint("5a"));    // 0
trace(uint("ten"));   // 0
trace(uint("17 63")); // 0

ActionScript 3.0에서 Number() 함수는 더 이상 8진수 또는 밑수가 8인 숫자를 지원하지 않습니다. ActionScript 2.0에서 Number() 함수에 0으로 시작되는 문자열을 제공하면 숫자가 8진수로 해석된 후 10진수로 변환됩니다. ActionScript 3.0에서 Number() 함수는 문자열 맨 앞에 있는 0을 무시하기 때문에 이전 버전에서와 같이 수행되지 않습니다. 예를 들어 다음 코드를 서로 다른 버전의 ActionScript를 사용하여 컴파일하면 각기 다른 결과가 출력됩니다.

trace(Number("044")); 
// ActionScript 3.0 44
// ActionScript 2.0 36

특정 숫자 유형의 값이 다른 숫자 유형의 변수에 지정된 경우에는 변환할 필요가 없습니다. Strict 모드에서도 숫자 유형이 다른 숫자 유형으로 암시적으로 변환됩니다. 이는 경우에 따라 유형 범위를 벗어나면 예기치 못한 값이 발생할 수 있다는 것을 의미합니다. 경우에 따라 예기치 못한 값이 생성될 수 있지만 다음 예제는 Strict 모드에서 모두 컴파일됩니다.

var myUInt:uint = -3; // uint 변수에 int/Number 값을 지정합니다.
trace(myUInt); // 4294967293

var myNum:Number = sampleUINT; // Number 변수에 int/uint 값을 지정합니다.
trace(myNum) // 4294967293

var myInt:int = uint.MAX_VALUE + 1; // uint 변수에 Number 값을 지정합니다.
trace(myInt); // 0

myInt = int.MAX_VALUE + 1; // int 변수에 uint/Number 값을 지정합니다.
trace(myInt); // -2147483648

다음 표에는 다른 데이터 유형에서 Number, int 또는 uint 데이터 유형으로의 변환 결과가 요약되어 있습니다.

데이터 유형 또는 값

Number, int 또는 uint로 변환한 결과

Boolean

값이 true이면 1로 변환되고 그렇지 않으면 0으로 변환됩니다.

Date

Date 객체의 내부 표현 즉, 표준시 1970년 1월 1일 자정 이후 경과된 밀리초로 변환됩니다.

null

0

Object

null인 인스턴스를 Number로 변환하면 NaN이 반환되고 그 외의 경우에는 0이 반환됩니다.

String

Flash Player에서 문자열을 숫자로 변환할 수 있는 경우 숫자가 반환되고, 그렇지 않은 경우 Number로 변환하면 NaN이 반환되고 int 또는 uint로 변환하면 0이 반환됩니다.

undefined

Number로 변환하면 NaN이 반환되고 int 또는 uint로 변환하면 0이 반환됩니다.

Boolean으로 변환

숫자 데이터 유형(uint, int 및 Number)에서 Boolean으로 변환하면, 숫자 값이 0인 경우 false가 반환되고 그렇지 않으면 true가 반환됩니다. Number 데이터 유형의 경우 NaN 값 역시 false가 됩니다. 다음 예제에서는 숫자 -1, 0 및 1을 변환한 결과를 보여 줍니다.

var myNum:Number;
for (myNum = -1; myNum<2; myNum++)
{
    trace("Boolean(" + myNum +") is " + Boolean(myNum));
}

이 예제의 출력에서 숫자 0만 false 값을 반환하는 것을 확인할 수 있습니다.

Boolean(-1) is true
Boolean(0) is false
Boolean(1) is true

문자열 값에서 Boolean으로 변환하는 경우 문자열이 null이거나 빈 문자열("")이면 false를 반환합니다. 그렇지 않으면 true를 반환합니다.

var str1:String;       // 초기화되지 않은 문자열은 null입니다.
trace(Boolean(str1));  // false

var str2:String = "";  // 빈 문자열
trace(Boolean(str2));  // false

var str3:String = " "; // 공백만
trace(Boolean(str3));  // true

Object 클래스의 인스턴스에서 Boolean으로 변환하는 경우 인스턴스가 null이면 false를 반환하고 그렇지 않으면 true를 반환합니다.

var myObj:Object;      // 초기화되지 않은 객체는 null입니다.
trace(Boolean(myObj)); // false

myObj = new Object();  // 인스턴스화합니다. 
trace(Boolean(myObj)); // true

Strict 모드에서 모든 데이터 유형의 값을 Boolean으로 변환하지 않고 부울 변수에 지정할 수 있다는 점에서 부울 변수는 특수하게 처리되는 변수입니다. Strict 모드에서도 모든 데이터 유형에서 Boolean 데이터 유형으로 암시적으로 강제 형 변환합니다. 즉, 대부분의 다른 모든 데이터 유형과 달리 Strict 모드 오류를 방지하기 위해 Boolean으로 변환할 필요가 없습니다. 다음 예제는 Strict 모드에서 모두 컴파일되고 런타임에 예상대로 작동됩니다.

var myObj:Object = new Object();  // 인스턴스화합니다. 
var bool:Boolean = myObj;
trace(bool); // true
bool = "random string";
trace(bool); // true
bool = new Array();
trace(bool); // true
bool = NaN;
trace(bool); // false

다음 표에는 다른 데이터 유형에서 Boolean 데이터 유형으로 변환한 결과가 요약되어 있습니다.

데이터 유형 또는 값

Boolean로 변환한 결과

String

값이 null 또는 빈 문자열("")이면 false를 반환하고 그렇지 않으면 true를 반환합니다.

null false

Number, int 또는 uint

값이 NaN 또는 0이면 false를 반환하고 그렇지 않으면 true를 반환
합니다.

Object

인스턴스가 null이면 false를 반환하고 그렇지 않으면 true를 반환
합니다.

String으로 변환

모든 숫자 데이터 유형에서 String 데이터 유형으로 변환하면 숫자의 문자열 표현을 반환합니다. 부울 값에서 String 데이터 유형으로 변환하면 값이 true인 경우 "true" 문자열을 반환하고 값이 false인 경우 "false" 문자열을 반환합니다.

Object 클래스의 인스턴스에서 String 데이터 유형으로 변환하면 인스턴스가 null인 경우 "null" 문자열을 반환합니다. 그렇지 않은 경우, Object 클래스에서 String 유형으로 변환하면 "[object Object]" 문자열을 반환합니다.

Array 클래스의 인스턴스에서 String으로 변환하면 모든 배열 요소가 쉼표로 구분된 목록으로 구성된 문자열을 반환합니다. 예를 들어, 다음과 같이 String 데이터 유형으로 변환하면 세 가지 배열 요소가 모두 포함되어 있는 하나의 문자열을 반환합니다.

var myArray:Array = ["primary", "secondary", "tertiary"];
trace(String(myArray)); // primary,secondary,tertiary

Date 클래스의 인스턴스에서 String으로 변환하면 인스턴스에 포함된 날짜의 문자열 표현을 반환합니다. 예를 들어, 다음 예제에서는 Date 클래스 인스턴스의 문자열 표현(태평양 일광 절약 시간으로 결과 표시)을 반환합니다.

var myDate:Date = new Date(2005,6,1);
trace(String(myDate)); // Fri Jul 1 00:00:00 GMT-0700 2005

다음 표에는 다른 데이터 유형에서 String 데이터 유형으로 변환한 결과가 요약되어 있습니다.

데이터 유형 또는 값

문자열로 변환한 결과

Array

모든 배열 요소로 구성된 문자열을 반환합니다.

Boolean

"true" 또는 "false"를 반환합니다.

Date

Date 객체의 문자열 표현을 반환합니다.

null "null"

Number, int 또는 uint

숫자의 문자열 표현을 반환합니다.

Object

인스턴스가 null이면 "null"을 반환하고 그렇지 않으면 "[object Object]"를 반환합니다.


Flash CS3

 

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

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