증감연산자 ++n, n++ (전위,후위) 차이점

JavaScript에서는 전위 증감 연산자와 후위 증감 연산자를 다양한 상황에서 사용할 수 있지만, 일부 복잡한 표현식에서는 결과가 예상과 다를 수 있으므로 주의가 필요합니다. 특히 전위 증감 연산자와 후위 증감 연산자를 함께 사용하거나 다른 연산자와 결합하여 사용할 때 이해하기 어려운 동작을 보일 수 있습니다.

자바스크립트 에서의 전위, 후위 증감 연산자의 차이점

전위 증감 연산자는 변수의 값을 증가시킨 다음, 그 증가된 값을 반환합니다. 예를 들어

let a = 5;
let b = ++a;
console.log(a);    // 6
console.log(b);    // 6

위의 코드에서 ++aa의 값을 1 증가시킨 후에 그 값을 b에 할당합니다.

후위 증감 연산자는 변수의 값을 반환한 다음에 증가시킵니다. 예를 들어

let a = 5;
let b = a++;
console.log(a);    // 6
console.log(b);    // 5

위의 코드에서 a++a의 값을 b에 할당한 후에 a의 값을 1 증가시킵니다.

두 증감 연산자의 차이를 정리해 보면 1 증가시키는 것은 같지만 그 시기가 증감후 실행문을 실행하는 것과 실행문 이후에 증감을 하는지의 차이라고 볼수 있습니다.

언어유형에 따른 후위연산자의 다른 해석

이러한 전위, 후위 증감 연산자는 언어에 따라 조금 다른점이 있습니다.
C언어를 예로 들어 어떤 점이 다른지 알아보겠습니다.

  1. 데이터 타입 변환: JavaScript는 동적 타입 언어이므로, 증감 연산자를 사용할 때 변수의 데이터 타입을 자동으로 변환합니다. 예를 들어, 문자열을 숫자로 변환하고 증감 연산을 수행할 수 있습니다. C는 정적 타입 언어이므로 증감 연산자를 사용할 때 데이터 타입이 일치해야 합니다.
  2. 반환 값: C에서 후위 증감 연산자는 증감 전의 값을 반환하지만, JavaScript에서는 증감 후의 값을 반환합니다. 예를 들어, let a = 5; let b = a++;에서 b는 JavaScript에서는 5가 되지만, C에서는 6이 됩니다.
  3. 사이드 이펙트: C에서 후위 증감 연산자를 사용할 때 변수의 값을 증가시키는 것이 보장되지만, JavaScript에서는 동시에 발생하는 사이드 이펙트로 인해 결과가 예상과 다를 수 있습니다. 예를 들어, let a = 5; console.log(a++ + ++a);에서 결과는 JavaScript에서는 12이지만, C에서는 정의되지 않은 동작입니다.

전위 증감 연산자(++n)는 모든 언어에서 같은 해석을 하고 후위 증감 연산자(n++)만 서로 다른 해석이 있습니다.
만약에 새로운 언어에 익숙치 않는다면 전위 증감 연산자로만 프로그래밍하는 것이 조금 유리할 것 같네요.

이러한 차이점은 C와 JavaScript의 언어적 특성과 타입 시스템의 차이에서 기인합니다.
따라서 새로운 언어에서 전위 증감 연산자와 후위 증감 연산자를 사용할 때는 각 언어의 동작 방식과 규칙을 확인하고 사용하는 것이 중요합니다.

C언어과 같은 해석을 하는 언어 : C++, Objective-C, C#, Kotlin등
자바스크립트와 같은 해석을 하는 언어 : TypeScript, CoffeeScript, Swift, Ruby등

증감연산자를 지원하지 않는 언어

위에도 말했듯이 대부분의 언어에서 전위 증감 연산자는 변수의 값을 1 증가시킨 후에 그 값을 반환합니다.
다만, 몇 가지 예외적인 경우가 있을 수 있습니다. 일부 언어는 증감 연산자의 사용 방식이나 동작 방식을 변경하거나 지원하지 않을 수 있습니다. 예를 들어, Go 언어는 전위 증감 연산자를 지원하지 않고, Rust 언어는 증감 연산자 대신에 메서드를 사용하여 값을 증감시킵니다.

[결론]
전위 증감연산자는 모든 언어가 같은 방식으로 작동하며 후위 증감연산자만 해석이 두 계열로 나뉜다.
경우에 따라는 증감연산자를 지원하지 않는 언어도 있으니 새로운 언어를 사용할 때는 잘 알아보고 사용하자!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다