C++ 증감 연산자
목차
증감 연산자는 하나의 피연산자를 사용하는 연산자로 스스로를 증가 시키거나 감소 시킬 수 있는 연산자를 말합니다.
연산자라는 것은 보통 어떤 두개의 피연산자(항)에 정해진 상호작용을 합니다. 이 정해진 상호작용을 연산이라고 부를 수 있습니다.
산수를 할 수 있는 정도라면 이해할 수 있는 내용이지만 컴퓨터 공학에서 사용하는 용어를 한번 정리해 보겠습니다.
연산자 관련 용어 설명
연산자(Operator) : 연산자는 + – 와 같은 기호로 표시를 하는데 피연산자에게 어떤 작용을 합니다.
피연산자(Operand) : 컴퓨터 용어는 오퍼랜드(Operand) 라고도 합니다. 연산자가 작용하는 대상을 말합니다. C++에서는 예를 들어 상수일수도 있고 변수일 수도 있습니다. 객체나 구조체, 배열 등 복합 자료구조에게도 가능합니다.
연산자 오버라이딩(operator overriding): 연산자 오버라이딩을 사용하면 연산자 기호를 사용자가 정의할 수 있습니다. 예를 들어 + 는 숫자를 더하는 기호로 알고 있지만 연산자의 기능을 사용자가 다른 방식으로 정의할 수 있습니다.
연산자 오버로딩(operator overloading) : 연산자 오버로딩은 연산자 기호에 한 가지 이상의 기능을 부여하는 방법입니다.
기초 단계에서 연산자 오버라이딩까지 이해하는 것은 약간 무리가 있습니다. 여기서 알고 가야 할 것은 기호라는 것은 정의하기 나름이라는 점입니다. 컴퓨터 프로그래밍 언어에는 각각 기호에 연결된 연산자가 있는데 수학의 기호와 비슷하다고 해서 혼동해서는 안됩니다.
증가 연산자 (++)
증가 연산자는 변수의 앞이나 뒤에 붙여서 사용할 수 있습니다. count++ 처럼 피연산자는 하나만 필요합니다. 이런 것을 단항연산자라고 합니다. 결과는 count = count + 1 과 같습니다.
사용방법은 ++ 을 앞에 붙이거나 뒤에 붙이는 것입니다. 앞에 붙일 경우 접두어 방식(prefix) 뒤에 붙일 경우 접미어 방식(postfix) 이라고 합니다.
앞에 붙이는 것과 뒤에 붙이는 것에는 차이가 있는데 아래 예제를 보면서 알아보겠습니다.
#include <iostream> using namespace std; int main() { int count = 0; count++; cout << "count : " << count << endl; ++count; cout << "count : " << count << endl; cout << "count : " << count++ << endl; cout << "count : " << count << endl; cout << "count : " << ++count << endl; return 0; }
count : 1 count : 2 count : 2 count : 3 count : 4
하나의 문 (statement)의 관점에서 알아보겠습니다. count++; 이 라인이 끝나면 count 는 스스로 1을 증가 시킵니다. count++ 의 경우 ++연산을 마지막에 수행합니다. 즉 count = 2 인 상태로 문장이 시작되면 cout 가 2를 출력하고 그 후에 count 는 3이 됩니다. 기호를 뒤에 붙이면 postfix 입니다.
++count 의 경우 이 count 변수를 다른 연산에 사용하기 전에 먼저 증가를 시킵니다. count 가 2였다면 cout 이 출력할 때는 하나 더한 3으로 출력합니다. 기호를 앞에 붙이면 prefix입니다.
즉 표현식을 먼저 평가한 후 값을 나중에 증가시키는 것이 postfix 그 반대가 prefix 입니다.
감소 연산자(–)
#include <iostream> using namespace std; int main() { int count = 5; count--; cout << "count : " << count << endl; --count; cout << "count : " << count << endl; cout << "count : " << count-- << endl; cout << "count : " << count << endl; cout << "count : " << --count << endl; return 0; }
count : 4 count : 3 count : 3 count : 2 count : 1
감소 연산자의 원리는 증가 연산자의 반대입니다. prefix 를 붙이면 미리 감소한 값을 사용하는 것이고 postfix를 붙이면 문장이 마지막에 감소를 시킵니다.
약간 tricky 합니다. 이 때문에 증감연산자를 사용하지 않는 프로그래밍 언어도 있는데요. 너무 혼란스럽게만 사용하지 않으면 됩니다.
요약
C++의 증감 연산자를 알아봤습니다. 이것을 표현식(expression)의 관점에서 바라본다면 시점과 순서의 문제로 볼 수 있습니다.
구문(statement)에 한개만 사용하면 그나마 정확히 알 수 있지만, 2개 이상의 증감연산자를 쓰는 것은 컴파일시 불확실성이 높아집니다.
굳이 무리해서 사용하여 혼동이 오지 않도록 사용상에 주의를 합니다.
참고문서
Increment and Decrement Operator in C++ – C++ Tutorial
Increment ++ and Decrement — Operator Overloading in C++ Programming
Increment/decrement operators – cppreference.com