IT_Programming/JavaScript

자바스크립트 완벽가이드 - 5.3 산술 연산자

JJun ™ 2010. 7. 4. 19:25


지금까지 연산자 우선순위, 결합방향, 그 외 배경 지식들을 설명하였다.

이제부터는 연산자 자체를 논할 차례다. 이번 절에서는 산술 연산자를 자세히 다루겠다.


 

덧셈(+)
+ 연산자는 숫자 타입 피연산자의 덧셈이나 문자열 타입 피연산자의 어이붙이기에 쓰인다.

만일 하나의 피연산자만이 문자열이라면 다른 피연산자를 문자열로 변환한 후 두 문자열을 이어 붙인다.

객체 피연산자는 더하거나 이어 붙일 수 있게 숫자나 문자열로 변환된다. 이 변환은 객체의 valueOf() 메서드나 toString() 메서드에 의해 수행된다.

뺄셈(-)
- 연산자가 2항 연산자로 쓰일 경우 첫 번째 피연산자에서 두 번째 피연산자를 뺀다.

피연산자가 숫자 타입이 아닐 경우 먼저 숫자 타입으로 변환을 시도한다.

곱셈(*)
* 연산자는 두 피연산자를 곱한다. 피연산자가 숫자 타입이 아닐 경우 먼저 숫자 타입으로 변환을 시도한다.

나눗셈(/)
/ 연산자는 첫 번째 피연산자를 두 번째 피연산자로 나눈다.

피연산자가 숫자타입이 아닐 경우 먼저 숫자 타입으로 변환을 시도한다.

여러분이 정수와 부동소수점 숫자를 구분하는 프로그램 언어에 익숙하다면 정수를 정수로 나눌 경우

결과로도 정수를 얻으리라 예상할 것이다. 하지만 자바스크립트에서는 모든 숫자가 부동소수점으로

취급된다. 따라서 모든 나눗셈 연산은 부동소수점 결과를 내놓는다. 5/2의 결과는 2가 아니라 2.5인 것이다.

0으로 나누는 연산 결과는 양의 무한대 또는 음의 무한대가 되며, 0/0의 결과는 NaN이 된다.

나머지(%)
% 연산자는 첫 번째 피연산자에 대한 두 번째 피연산자의 나머지 연산을 수행한다.

다시 말하면 첫 번째 피연산자를 두 번째 피연산자로 나누고 남은 나머지를 반환한다는 것이다.

피연산자가 숫자 타입이 아닐 경우 먼저 숫자 타입으로 변환을 시도한다.

결과의 부호는 첫 번째 피연산자의 부호와 동일하다. 예를 들어 5 % 2의 결과는 1이다.
일반적으로 나머지 연산자는 정수 타입의 피연산자에 대해서 쓰이지만, 부동소수점 값에 대해서도

적용할 수 있다. 예를 들어 -4.3 % 2.1의 결과는 -0.1 이다.

단항 마이너스(-)
-가 하나의 피연산자 앞에서 단항 연산자로 쓰이면 단항 부정을 수행한다.

다시 말하면 양수값을 같은 크기의 음수값으로, 음수값은 같은 크기의 양수값으로 바꾼다.

피연산자가 숫자 타입이 아닐 경우 먼저 숫자 타입으로 변환을 시도한다.

단항 플러스(+)
단항 마이너스 연산자와 대칭을 이루기 위해 자바스크립트는 단항 플러스 연산자도 존재한다.

이 연산자는 숫자 리터럴의 부호를 명시적으로 지정할 수 있게 해준다.

(이렇게 함으로써 여러분의 코드가 좀 더 명확해지는 것 같다면 말이다.)

var profit = +1000000;


위와 같은 코드에서 + 연산자는 아무 일도 하지 않는다. 그저 전달인자의 값을 그대로 산출할 뿐이다.

하지만 전달인자가 숫자 타입이 아닌 경우에 주목 해야 한다. 이 경우 + 연산자는 전달인자를 숫자 타입으로 변환하는 효과가 있다. 만일 그 전달인자가 변환될 수 없는 경우 NaN을 반환한다.

증가(++)
++ 연산자는 단항 피연산자에 대해 증가 연산을 수행한다. (즉, 1을 더한다.) 이때 피연산자는 변수, 배열 원소, 또는 객체 프로퍼티 중 하나여야 한다. 이러한 변수, 원소, 또는 프로퍼티가 숫자가 아닐 경우 ++ 연산자는 일단 이를 숫자 타입으로 변환하려 시도한다. 이 연산자의 정확한 작동은 피연산자의 어느 쪽에 연산자가 놓여 있는가에 따라 다르다. 피 연산자의 앞에서 사용될 경우 전치증가(pre-increment) 연산자라 불리며, 먼저 피연산자를 중가시킨 다음 이 증가된 값을 결과로 내놓는다. 피연산자의 뒤에서 사용될 경우 후치증가(post-increment) 연산자라 불리며, 마찬가지로 피연산자를 증가시키지만 결과로는 원래의 증가되지 않은 값을

내놓는다. 증가시킬 값이 숫자가 아닐 경우 이러한 과정을 통해 숫자로 변환된다.


예를 살펴보자. 다음의 코드에서 i와 j는 둘 다 2로 설정된다.

i = 1;
j = ++i;


하지만 아래에서는 i는 2로, j는 1로 설정된다.

i = 1;
j = i++;


이렇게 두 가지 형태로 쓰일 수 있는 이 연산자는 일반적으로 루프 제어 카운터를 증가시키는데 가장 많이

쓰인다. 자바스크립트에서는 자동 세미콜론 삽입 기능이 있기 때문에 후치증가, 후치감소 연산자와 그 앞의 피연산자 사이에서 줄바꿈을 해서는 안 된다. 만일 그럴 경우 자바스크립트에서 이 피연산자를 그 자체로

하나의 완결된 표현식으로 취급하게 되어 연산자 앞에 세미콜론을 삽입할 것이다.

 

감소(--)
-- 연산자는 단항 피연산자에 대해 감소 연산을 수행한다(즉, 1을 뺀다). 이때 피연산자는 변수, 배열 원소,

또는 객체 프로퍼티 중 하나여야 한다. 이러한 변수, 원소, 또는 객체 프로퍼티가 숫자가 아닐 경우 -- 연산자는 일단 이를 숫자 타입으로 변환하려 시도한다. ++ 연산자와 마찬가지로 -- 연산자의 정확한 작동은 피연산자의 어느 쪽에 연산자가 놓여 있는가에 따라 다르다. 피연산자의 앞에서 사용될 경우 피연산자를 감소시킨 다음 결과로도 감소된 값을 반환한다. 피연산자의 뒤에서 사용될 경우 피연산자를 감소시키지만 결과로는

원래의 감소되지 않은 값을 반환한다.