두번째 공부(개발공부)/JavaScript DeepDive

TIL ] 연산자 part.2 - 산술연산자

YTReeee 2023. 5. 13. 09:39

어제 밤에 이어서 연산자에 대해 알아보자!

첫번째로 산술연산자을 공부하고자 한다.

 

산술 연산자?

핵심은 수학적 계산 기능에 있다. 즉, 피연산자를 대상으로 수학적 계산을 통해 새로운 값을 만들어낸다.

산술 연산이 불가능하면, NaN을 반환한다.

 

피연산자의 개수에 따라 단항(unary), 이항(binary) 산술 연산자로 구분한다.

이항 산술 연산자는 2개의 피연산자를 대상으로 수학적 계산을 통해 새로운 숫자 값을 만들어낸다.

모든 이항 산술 연산자는 피연산자의 값을 변경하는 부수 효과(side effect)가 없다.

그냥 산수네?

 

단항 산술 연산자는 1개의 피연산자를 산술 연산하여 숫자값을 만든다.

단항 산술 연산자 의미 부수 효과
++ 증가 O
-- 감소 O
+ 어떠한 효과도 없음. 음수를 양수로 반전하지도 않음 X
- 양수를 음수로, 음수를 양수로 반전한 값을 반환한다. X

이게 뭐람?

단항 산술 연산자 중 증가/감소(++ / --) 연산자는 피연산자의 값을 변경하는 부수효과가 있다.

피연산자의 값을 변경하는 부수효과(side effect)는 위의 콘솔창 캡쳐화면에서와 같이 a라고 선언한 변수의 값이 단항 산술 연산자를 만나 값이 변하는 것이다.

 

증가/감소(++/--) 연산자는 피연산자와의 위치에 따라 의미가 다르다.

let a = 1;

let result = a++;  // console.log(result)의 결과는 1이다. a는?
console.log(a) // -> 2
//즉, 할당이 먼저 이뤄지고 난 후 1을 증가하라는 연산이 작동한다.

result = ++a; // -> console.log(result, a)의 결과는 3 3 이 출력된다.
//즉, 1을 증가하라는 연산이 먼저 작동한 후, 각 변수들에 할당이 이뤄진다.

result = a--; // console.log(result)의 결과는 3이다. a는?
console.log(a) // -> 2
//증가 연산자와 마찬가지로 할당이 먼저, 1감소 연산이 나중에 작동하는 것을 알 수 있다.

result = --a; // console.log(result, a)의 결과는 1 1이 출력된다.
//1감소 연산이 먼저, 이후 할당이 이뤄졌다.

 

+ 단항 연산자는 피연산자에 어떤 효과도 없다.

+ 단항연산자 시연1

단, 숫자 타입이 아닌 피연산자에 +단항 연산자를 사용하면 피연산자의 타입을 숫자타입으로 변환하여 반환한다(피연산자를 변경하지는 않는다. → 부수효과는 없다.)

  • 문자열을 숫자 타입으로 변환한다(숫자가 입력된 문자열인 경우 //+ '2' → 2).
  • 불리언 타입은 1과 0으로 변환한다(+ true == 1, + false == 0).
  • 문자열을 숫자 타입으로 바꿀 수 없을 때는 NaN을 반환한다(+ 'hi' → NaN).
  • cf) NaN은 Not a Number의 약자로 연산과정에서 잘못된 입력을 받았음을 나타내는 기호이다(출처:위키백과).

 

- 단항연산자는 피연산자의 부호를 반전한 값을 반환한다. 그 외 특징은 +단항 연산자와 동일하다.

  • 문자열을 숫자타입으로(- '2'   - 2)
  • 불리언타입을 숫자타입으로(- true -1, // - false = -0 아고 의미없다 ㅎ)
  • 숫자타입으로 바뀌지 않는 문자열을 NaN 반환

 

문자열 연결 연산자(+연산자)는 피연산자 중 하나 이상이 문자열이면 문자열 연결 연산자로 동작한다.

'2' + 2 // '22'
2 + '2' // '22'
1 + true // 2
1 + false // 1
1 + null // 1
+undefined // NaN
1+undefined // NaN

// 개발자 의도와 관계 없이 타입을 변경하여 반환한다.
// 연산자 사용 시 같은 타입끼리 입력하여 의도와 다른 결과물을 얻지 말자!

콘솔로 예제를 따라하면서 진행하다보니?

시간이 꽤걸린다. 그래도 이해는 훨씬 잘되는 것 같다.

산술연산자는 기본적으로 사칙연산이다.

+연산자를 이용하여 문자열을 연결(예외) 할 수도 있지만,

그 외의 -, *, /, % 와 같은 부호들은 사칙연산에서만 사용이 가능하다.

문자열의 사칙연산은 거부한다! 그저 연결할 뿐

연산자에 생각보다 많은 연산자들이 있다...;;

한꼭지씩 씹어 삼켜서 이해하는 느낌으로 책을 리뷰해보자!