앞서 산술 연산자와 우선순위에 대해 알아보았다. 이번 글에서는 변수의 값을 간편하게 증가시키거나 감소시키는 증감 연산자(++, --), 그리고 많은 초보자가 헷갈려 하는 전위(Prefix)와 후위(Postfix) 방식의 차이점을 정리한다.
1. 증감 연산자란?
증감 연산자는 변수의 값을 한 단계 증가시키거나 감소시키는 단항 연산자다.
-
++(증가 연산자): 변수의 값을 1 증가시킨다. -
--(감소 연산자): 변수의 값을 1 감소시킨다.
int a = 10;
a++; // a = a + 1 또는 a += 1 과 동일한 효과 (a는 11이 됨)
💡 올바른 개념 잡기: 단순히 "1이 더해진다"보다는 **"다음 단계로 이동한다"**로 이해하는 것이 좋다. 나중에 학습할 포인터(Pointer) 연산에서는 피연산자의 자료형 크기에 따라 '한 단계'의 이동 단위가 4바이트, 8바이트 등으로 달라지기 때문이다.
2. 증감 연산자의 위치: 전위(Prefix) vs 후위(Postfix)
증감 연산자는 변수의 앞이나 뒤 중 어디에 붙이느냐에 따라 연산의 우선순위가 완전히 달라진다.
1) 전위 연산자 (++a, --a)
-
원리: "선 증가, 후 연산"
-
변수의 값을 먼저 증가시킨 후, 해당 라인의 다른 연산(대입 등)을 수행한다.
int a = 10;
int data = ++a;
// 1. a가 먼저 11로 증가
// 2. 증가된 값 11이 data에 대입됨 (data: 11, a: 11)
2) 후위 연산자 (a++, a--)
-
원리: "선 연산, 후 증가"
-
해당 라인의 모든 연산을 먼저 처리한 후, 가장 마지막에 변수의 값을 증가시킨다. (대입 연산자보다도 우선순위가 낮다)
int a = 10;
int data = a++;
// 1. a의 현재 값(10)이 data에 먼저 대입됨
// 2. 대입이 끝난 후 a가 11로 증가함 (data: 10, a: 11)
3. 전위 방식(++a)을 사용하는 습관이 좋은 이유
단독으로 a++; 또는 ++a;를 사용할 때는 결과에 차이가 없다. 하지만 실무나 객체지향 프로그래밍(C++)에서는 전위 방식을 기본적으로 사용하는 습관을 들이는 것이 권장된다.
-
복합 연산 시의 실수를 방지: 후위 연산자는 연산 순서가 직관적이지 않아 버그를 유발하기 쉽다.
-
성능상의 이점 (클래스 및 객체):
-
C++에서 사용자 정의 객체(클래스/구조체)에 증감 연산자를 오버로딩할 때, 후위 연산자는 값이 변경되기 전의 상태를 저장해 둘 임시 객체를 생성해야 한다.
-
따라서 불필요한 복사 비용이 발생할 수 있으므로, 특별한 사유가 없다면 전위 연산자(
++var)를 사용하는 것이 성능상 유리하다.
-
마무리하며
-
증감 연산자는 단순 1 증가가 아닌 "다음 단계로의 이동"으로 이해하는 것이 포인터 개념 확장에 도움이 된다.
-
전위(
++a)는 증가 후 대입, 후위(a++)는 대입 후 증가한다. -
코드의 직관성과 가독성을 위해 특별한 이유가 없다면 전위 방식을 우선 사용하자.