산술 연산자가 값을 계산하는 연산자라면,
증감 연산자는 변수의 값을 직접 변경하면서 동시에 그 값을 표현식으로 반환하는 연산자다.
이 “두 가지 동작이 동시에 일어난다”는 점 때문에 초보자뿐 아니라 실무에서도 실수가 자주 발생한다.
1. 증감 연산자의 기본 동작
다음 코드를 보자.
int a = 10;
a++;
이 코드는 단순히 a의 값을 1 증가시킨다.
실행 결과:
a = 11;
여기까지는 문제 없다.
하지만 이 코드를 “식(expression)” 안에 넣는 순간 상황이 달라진다.
2. 표현식에서의 증감 연산자
C언어에서 대부분의 연산자는 “값을 반환”한다.
증감 연산자도 예외가 아니다.
a++;
즉, 이 코드는 단순 명령이 아니라 하나의 값으로 평가되는 표현식이다.
이때 중요한 질문이 생긴다.
“증가되기 전 값이 반환되는가, 증가된 값이 반환되는가?”
이 질문의 답이 전위/후위 개념이다.
3. 후위 증가 (a++) – 사용 후 증가
다음 코드를 보자.
int a = 10;
int b = a++;
이 코드는 한 줄이지만 내부적으로는 순서가 존재한다.
실행 순서
1. a의 현재 값(10)을 읽는다.
2. 그 값을 b에 저장한다.
3. 그 다음 a를 1 증가시킨다.
결과
a = 11;
b = 10;
즉, a++는 “현재 값을 먼저 사용하고, 이후 증가”한다.
4. 전위 증가 (++a) – 증가 후 사용
이번에는 전위 연산이다.
int a = 10;
int b = ++a;
실행 순서
1. a를 먼저 1 증가시킨다. (10 → 11)
2. 증가된 값을 읽는다.
3. b에 저장한다.
결과
a = 11;
b = 11;
즉, ++a는 “먼저 증가하고, 그 값을 사용”한다.
5. 두 연산자의 본질적인 차이
이 차이를 단순히 외우면 금방 헷갈린다.
핵심은 “언제 값이 바뀌는가”다.
표현 동작 흐름
a++ 값 사용 → 값 증가
++a 값 증가 → 값 사용
이걸 이해하면 어떤 상황에서도 헷갈리지 않는다.
6. 왜 이런 구조가 필요한가
증감 연산자는 단순 편의 기능이 아니다.
코드의 흐름을 간결하게 만들기 위해 존재한다.
대표적인 예가 반복문이다.
for (int i = 0; i < 10; i++)
{
// 반복 실행
}
이 코드는 다음 의미를 가진다.
1. i = 0으로 시작
2. 조건 검사
3. 반복 수행
4. i를 1 증가
5. 다시 조건 검사
여기서 i++는 반복 흐름을 자연스럽게 이어주는 역할을 한다
7. 증감 연산자와 표현식의 결합 (주의)
문제는 증감 연산자를 다른 연산과 섞을 때 발생한다.
int a = 10;
int b = a++ + 5;
이 코드를 단계적으로 보면
1. a의 현재 값(10)을 사용
2. 10 + 5 → 15
3. 그 다음 a는 11이 됨
결과
a = 11;
b = 15;
8. 안전한 사용 방법
증감 연산자는 반드시 아래 원칙을 지켜야 한다.
원칙 1: 한 표현식에서 한 번만 사용
a++;
b = a + 5;
원칙 2: 다른 연산과 섞지 않는다
// 위험
b = a++ + 5;
// 안전
b = a + 5;
a++;
원칙 3: 흐름이 보이게 작성한다
“짧은 코드”보다 “명확한 코드”가 중요하다
9. 실무 관점에서의 의미
증감 연산자는 단순 문법이 아니다.
실제에서는 다음과 같이 사용된다.
- 반복 제어 (for, while)
- 배열 인덱스 이동
- 버퍼 처리
- 포인터 이동
즉, “순차적으로 값을 변화시키는 모든 구조”에 사용된다.
정리
증감 연산자는 다음 두 가지를 동시에 수행한다.
- 변수 값을 변경한다.
- 그 값을 하나의 결과로 반환한다.
그리고 전위/후위의 차이는 단 하나다.
값이 변경되는 시점과, 그 값이 사용되는 시점의 차이
이걸 정확히 이해하면 이후 포인터, 배열, 반복문까지 자연스럽게 연결된다.
'C 언어 > 기초 문법' 카테고리의 다른 글
| [7장] C언어 연산자와 연산식 (4) – 비트 연산자 (<<, >>, ^, ~, &, |) (0) | 2026.05.09 |
|---|---|
| [6장] C언어 연산자와 연산식 (3) – 대입 연산자 (+=, -=, *=, /=, %=) (1) | 2026.05.09 |
| [4장] C언어 연산자와 연산식 (1) – 산술 연산자 (+, -, *, /, %) (0) | 2026.05.08 |
| [3장] C언어 데이터의 표현과 종류 (2) – 기본 자료형 총정리 (0) | 2026.05.07 |
| [2장] C언어 데이터의 표현과 종류 (1) (0) | 2026.05.07 |