연산자

연산자는 하나 이상의 피연산자를 사용하여 값을 반환하는 특수 함수입니다. 피연산자는 연산자가 입력값으로 사용하는 값으로, 일반적으로 리터럴, 변수 또는 표현식입니다. 예를 들어 다음 코드에서 더하기(+) 및 곱하기(*) 연산자는 세 개의 리터럴 피연산자(2, 3, 4)와 함께 사용되어 결과 값을 반환합니다. 그런 다음 이 값은 대입(=) 연산자가 사용하여 반환된 값 14를 변수 sumNumber에 지정합니다.

var sumNumber:uint = 2 + 3 * 4; // uint = 14

연산자에는 단항, 이항 또는 삼항 연산자가 있습니다. 단항 연산자는 한 개의 피연산자를 사용합니다. 예를 들어 증가(++) 연산자는 한 개의 피연산자만 사용하므로 단항 연산자입니다. 이항 연산자는 두 개의 피연산자를 사용합니다. 예를 들어 나누기(/) 연산자는 두 개의 피연산자를 사용합니다. 삼항 연산자는 세 개의 피연산자를 사용합니다. 예를 들어 조건(?:) 연산자는 세 개의 피연산자를 사용합니다.

일부 연산자는 오버로드할 수 있습니다. 이는 연산자에 전달된 피연산자의 유형 또는 개수에 따라 연산자의 동작이 달라진다는 것을 의미합니다. 더하기(+) 연산자는 피연산자의 데이터 유형에 따라 다르게 동작하는 오버로드된 연산자의 예입니다. 피연산자가 모두 숫자인 경우 더하기 연산자는 값의 합계를 반환합니다. 피연산자가 모두 문자열이면 더하기 연산자는 두 피연산자를 연결한 문자열을 반환합니다. 다음 예제 코드에서는 연산자가 피연산자에 따라 다르게 동작하는 방식을 보여 줍니다.

trace(5 + 5); // 10 
trace("5" + "5"); // 55

연산자는 제공된 피연산자의 수에 따라 다르게 동작할 수도 있습니다. 빼기(-) 연산자는 단항 연산자이면서 이항 연산자입니다. 피연산자가 한 개만 제공되면 빼기 연산자는 피연산자를 음수로 만들어 결과를 반환합니다. 피연산자가 두 개 제공되면 빼기 연산자는 피연산자 간의 차이를 반환합니다. 다음 예제에서는 먼저 단항 연산자로 사용된 다음 이항 연산자로 사용된 빼기 연산자를 보여 줍니다.

trace(-3); // -3 
trace(7 - 2); // 5

연산자 우선 순위와 연산 순서

연산자 우선 순위와 연산 순서에 따라 연산자 처리 순서가 결정됩니다. 산술에 익숙한 독자에게는 컴파일러에서 더하기(+) 연산자보다 곱하기(*) 연산자를 먼저 처리하는 것이 당연해 보이겠지만 컴파일러에게는 어떤 연산자를 먼저 처리할지에 대한 명시적인 지시 사항이 필요합니다. 이러한 지시 사항을 전체적으로 연산자 우선 순위라고 합니다. ActionScript에 정의된 기본 연산자 우선 순위는 괄호(()) 연산자를 사용하여 변경할 수 있습니다. 예를 들어 다음 코드는 컴파일러에서 곱하기 연산자보다 더하기 연산자를 먼저 처리하도록 이전 예제의 기본 우선 순위를 변경합니다.

var sumNumber:uint = (2 + 3) * 4; // uint == 20

우선 순위가 동일한 둘 이상의 연산자가 동일한 표현식에 나타나는 경우가 발생할 수도 있습니다. 이 경우 컴파일러는 연산 순서 규칙을 사용하여 먼저 처리할 연산자를 결정합니다. 대입 연산자를 제외한 모든 이진 연산자는 왼쪽 연관이므로 왼쪽에 있는 연산자가 오른쪽에 있는 연산자보다 먼저 처리됩니다. 대입 연산자와 조건(?:) 연산자는 오른쪽 연관이므로 오른쪽에 있는 연산자가 왼쪽에 있는 연산자보다 먼저 처리됩니다.

예를 들어 보다 작음(<) 연산자와 보다 큼(>) 연산자의 경우 우선 순위가 동일합니다. 두 연산자는 왼쪽 연관이므로 동일한 표현식에 사용될 경우 왼쪽에 있는 연산자가 먼저 처리됩니다. 즉, 다음 두 명령문의 결과는 동일합니다.

trace(3 > 2 < 1); // false 
trace((3 > 2) < 1); // false

보다 큼 연산자가 먼저 처리되며 피연산자 3이 피연산자 2보다 크기 때문에 true를 반환합니다. 그런 다음 true 값이 피연산자 1과 함께 보다 작음 연산자로 전달됩니다. 다음 코드는 이 중간 상태를 나타냅니다.

trace((true) < 1); 

보다 작음 연산자는 true 값을 숫자 값 1로 변환하고 두 번째 피연산자 1과 비교한 후 값 1이 1보다 작지 않으므로 false 값을 반환합니다.

trace(1 < 1); // false

괄호 연산자를 사용하면 기본적으로 적용되는 왼쪽 연산 순서를 변경할 수 있습니다. 연산자와 피연산자를 괄호로 묶어 컴파일러에서 보다 작음 연산자를 먼저 처리하도록 지시할 수 있습니다. 다음 예제에서는 괄호 연산자를 사용하여 이전 예제에서와 동일한 숫자로 다른 결과를 생성합니다.

trace(3 > (2 < 1)); // true

보다 작음 연산자가 먼저 처리되며 피연산자 2가 피연산자 1보다 크기 때문에 false 값을 반환합니다. 그런 다음 false 값이 피연산자 3과 함께 보다 큼 연산자로 전달됩니다. 다음 코드는 이 중간 상태를 나타냅니다.

trace(3 > (false)); 

보다 큼 연산자는 false 값을 숫자 값 0으로 변환하고 다른 피연산자 3과 비교한 후 값 3이 0보다 크므로 true 값을 반환합니다.

trace(3 > 0); // true

다음 표에는 ActionScript 3.0의 연산자가 우선 순위의 내림차순으로 나열되어 있습니다. 표의 각 행에는 우선 순위가 같은 연산자가 포함되어 있습니다. 이 표에서 각 행의 연산자는 아래 행에 있는 연산자보다 우선 순위가 높습니다.

그룹

연산자

기본

[] {x:y} () f(x) new x.y x[y] <></> @ :: ..

후위

x++ x--

단항

++x --x + - ~ ! delete typeof void

곱셈

* / %

추가

+ -

비트 시프트

<< >> >>>

비교

< > <= >= as in instanceof is

항등

== != === !==

비트 AND

&

비트 XOR

^

비트 OR

|

논리 AND

&&

논리 OR

||

조건

?:

대입

= *= /= %= += -= <<= >>= >>>= &= ^= |=

쉼표

,

기본 연산자

기본 연산자에는 Array 및 Object 리터럴을 만들고, 표현식을 그룹화하고, 함수를 호출하고, 클래스 인스턴스를 인스턴스화하며, 속성에 액세스하는 데 사용되는 연산자가 포함됩니다.

다음 표에 나열된 기본 연산자의 우선 순위는 모두 동일합니다. E4X 사양의 일부인 연산자는 E4X 표기법에 따라 표시합니다.

연산자

수행하는 연산

[]

배열 초기화

{x:y}

객체 초기화

()

표현식 그룹화

f(x)

함수 호출

new

생성자 호출

x.y x[y]

속성에 액세스

<></>

XMLList 객체 초기화(E4X)

@

특성에 액세스(E4X)

::

이름 정규화(E4X)

..

자손 XML 요소에 액세스(E4X)

후위 연산자

후위 연산자는 하나의 피연산자를 사용하며 값을 증가시키거나 감소시킵니다. 이 연산자는 단항 연산자이나, 높은 우선 순위와 특별한 동작 때문에 다른 단항 연산자와는 별개로 분류됩니다. 후위 연산자를 큰 표현식의 일부분으로 사용할 경우 후위 연산자가 처리되기 전에 표현식 값이 반환됩니다. 예를 들어 다음 코드는 값이 증가되기 전에 xNum++ 표현식의 값이 처리되는 방식을 보여 줍니다.

var xNum:Number = 0; 
trace(xNum++); // 0 
trace(xNum); // 1

다음 표에 나열된 후위 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

++

증가(후위)

--

감소(후위)

단항 연산자

단항 연산자는 하나의 피연산자를 사용합니다. 이 그룹의 증가(++) 및 감소(--) 연산자는 전위연산자로 표현식에서 피연산자 앞에 나타납니다. 전위 연산자의 경우 전체 표현식 값이 반환되기 전에 증가 또는 감소 연산이 완료된다는 점에서 후위 연산자와 다릅니다. 예를 들어 다음 코드에서는 값이 증가한 후에 ++xNum 표현식의 값이 처리되는 방식을 보여 줍니다.

var xNum:Number = 0; 
trace(++xNum); // 1 
trace(xNum); // 1

다음 표에 나열된 단항 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

++

증가(전위)

--

감소(전위)

+

단항 덧셈

-

단항 뺄셈(부정)

!

논리 NOT

~

비트 NOT

delete

속성 삭제

typeof

유형 정보 반환

void

정의되지 않은 값 반환

곱셈 연산자

곱셈 연산자는 피연산자 2개를 사용하여 곱하기, 나누기, 모듈러스 등을 계산합니다.

다음 표에 나열된 곱셈 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

*

곱하기

/

나누기

%

모듈러스

덧셈 연산자

덧셈 연산자는 피연산자 2개를 사용하여 더하기 또는 빼기를 계산합니다. 다음 표에 나열된 덧셈 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

+

더하기

-

빼기

비트 시프트 연산자

비트 시프트 연산자는 피연산자 2개를 사용하여 처음 피연산자의 비트를 두 번째 연산자에서 지정한 곳까지 확장합니다. 다음 표에 나열된 비트 시프트 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

<<

비트 왼쪽 시프트

>>

비트 오른쪽 시프트

>>>

(비트 부호 없는 오른쪽 시프트)

비교 연산자

비교 연산자는 피연산자 2개를 사용하여 값을 비교하며 부울 값을 반환합니다. 다음 표에 나열된 비교 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

<

보다 작음

>

보다 큼

<=

보다 작거나 같음

>=

보다 크거나 같음

as

데이터 유형 확인

in

객체 속성

instanceof

프로토타입 체인 확인

is

데이터 유형 확인

항등 연산자

항등 연산자는 피연산자 2개를 사용하여 값을 비교하고 부울 값을 반환합니다. 다음 표에 나열된 항등 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

==

항등

!=

비항등

===

완전 항등

!==

완전 비항등

비트 논리 연산자

비트 논리 연산자는 피연산자 2개를 사용하여 비트 수준 논리 연산을 수행합니다. 비트 논리 연산자 간에는 우선 순위가 다릅니다. 다음 표에는 비트 논리 연산자가 우선 순위의 내림차순으로 나열되어 있습니다.

연산자

수행하는 연산

&

비트 AND

^

비트 XOR

|

비트 OR

논리 연산자

논리 연산자는 피연산자 2개를 사용하여 부울 결과를 반환합니다. 논리 연산자 간에는 우선 순위가 다릅니다. 다음 표에는 논리 연산자가 우선 순위의 내림차순으로 나열되어 있습니다.

연산자

수행하는 연산

&&

논리 AND

||

논리 OR

조건 연산자

조건 연산자는 삼항 연산자로서 피연산자 3개를 사용합니다. 조건 연산자는 if..else 조건문을 적용하는 간단한 방법입니다.

연산자

수행하는 연산

?:

조건

대입 연산자

대입 연산자는 두 피연산자를 사용하여 한 피연산자의 값에 따라 다른 피연산자에 값을 대입합니다. 다음 표에 나열된 대입 연산자의 우선 순위는 모두 동일합니다.

연산자

수행하는 연산

=

대입

*=

곱하기 대입

/=

나누기 대입

%=

모듈러스 대입

+=

더하기 대입

-=

빼기 대입

<<=

비트 왼쪽 시프트 대입

>>=

비트 오른쪽 시프트 대입

>>>=

비트 부호 없는 오른쪽 시프트 대입

&=

비트 AND 대입

^=

비트 XOR 대입

|=

비트 OR 대입