기본 이해
개념 정의
부호/증감 연산자는 변수의 값을 증가시키거나 감소시키는 단항 연산자다.
종류
- 증가 연산자(++): 값을 1 증가
- 감소 연산자(--): 값을 1 감소
- 부호 연산자(+, -): 양수/음수 표현
작동 방식
int x = 5;
x++; // x = x + 1과 동일
x--; // x = x - 1과 동일
증가 연산자
++와 동일한 연산을 하는 방법이 2가지 더 있는데 작동 방식이 조금 다르다.
byte b = 127;
b = b + 1; // 컴파일 에러
b += 1; // 정상 작동 (-128이 됨)
b++; // 정상 작동 (-128이 됨)
때문에 특수 상황에서 연산 후 결과 값도 달라진다.
b+1의 경우 b가 연산 시 자동으로 int로 승격(promotion)되고 1도 int 타입이라 연산 결과는 int (128)가 된다.
때문에 byte에 대입 시도 → 컴파일러가 거부 과정을 거쳐서 컴파일 오류가 발생하게 된다.
감소 연산자
byte b = -128;
b = b - 1; // 컴파일 에러
b -= 1; // 정상 작동 (127이 됨)
b--; // 정상 작동 (127이 됨)
이 경우도 마찬가지로 작동한다.
부호 연산자
부호 연산자는 말그대로 부호를 바꾸는 연산자다. 기본적으로 + 형태이기 때문에 +를 붙여도 별도로 부호가 바뀌진 않는다. 그런데 실제로 +연산자와 - 연산자 모두 부호를 수정하는 작업을 실시한다.
때문에 이런 문제가 발생한다. 자바에선 기본적으로 연산시 int 타입으로 연산을 하기 때문에 부호연산자도 마찬가지로 값을 int 타입으로 자동 형변환한다.
byte b = 100;
byte result = -b; // 컴파일 에러
byte result = +b; // 컴파일 에러
전위 연산자와 후위 연산자
또한 ++와 --의 경우 피연산자의 앞에 오느냐 뒤에오느냐에 따라 연산 과정이 달라진다.
피연산자의 앞에 연산자가 오면 전위 연산자, 뒤에 오면 후위 연산자라고 한다.
int x = 10;
// 전위 증감 연산자 (prefix): 증감 먼저, 그 다음 다른 연산
++x; // x를 즉시 증가
--x; // x를 즉시 감소
// 후위 증감 연산자 (postfix): 다른 연산 먼저, 그 다음 증감
x++; // 현재 x값 사용 후 증가
x--; // 현재 x값 사용 후 감소
해당 줄의 모든 연산 전/후에 작동하기 때문에 상황에 맞게 값이 필요한 경우 사용할 수 있다.
///실제 계산되는 값
int a = 10;
System.out.println(++a); // 11 출력 (증가 후 출력)
System.out.println(a); // 11 출력
int b = 10;
System.out.println(b++); // 10 출력 (출력 후 증가)
System.out.println(b); // 11 출력
///예시 1: 변수에 할당할 때
int i = 0;
int a = ++i; // i를 증가시킨 후 a에 할당: a=1, i=1
int b = i++; // 현재 i값을 b에 할당 후 i 증가: b=1, i=2
///예시 2: 배열 인덱스로 사용할 때
int[] arr = {1, 2, 3};
int i = 0;
System.out.println(arr[++i]); // arr[1] 출력: 2
System.out.println(arr[i++]); // arr[1] 출력 후 i 증가
///예시 3: 계산식에서 사용할 때
int i = 5;
System.out.println(++i + 3); // 9 출력 (6 + 3)
System.out.println(i++ + 3); // 9 출력 후 i 증가 (6 + 3)
존재 이유와 목적
필요성
- 코드의 간결성 향상
- 반복문에서의 효율적인 카운터 관리
- 수학적 연산의 직관적 표현
실제 개발 역할
- 루프 제어
- 카운터 관리
- 증분/감분 연산의 간소화
주의사항과 일반적 오류
일반적 실수
- 전위/후위 연산자의 혼동
- 표현식 내에서의 복잡한 사용
- 동일 문장에서 여러 번 사용
// 잘못된 예시
int i = 5;
System.out.println(i++ + ++i); // 예측하기 어려운 결과
비교 분석
구분 | 전위 연산자 | 후위 연산자 |
---|---|---|
연산 시점 | 즉시 | 문장 실행 후 |
반환값 | 변경된 값 | 원래 값 |
사용 예 | ++x | x++ |
성능 | 약간 빠름 | 약간 느림 |
실무 활용
일반적 사용 사례
// 반복문에서의 활용
for(int i = 0; i < 10; i++) {
// 코드
}
// 카운터 관리
int count = 0;
while(condition) {
count++;
}
베스트 프랙티스
- 단순 증감은 별도 라인에서 수행
- 복잡한 표현식에서는 피하기
- 명확성이 필요한 경우 += 1, -= 1 사용
관련 개념
- 이전 개념: 기본 연산자, 변수와 데이터 타입
- 후속 개념: 비교 연산자, 논리 연산자
추가 학습 포인트
- 연산자 우선순위
- 비트 연산자
- 복합 대입 연산자
'Java > 자바 학습' 카테고리의 다른 글
자바의 비교 연산자 (1) | 2025.05.21 |
---|---|
자바 산술 연산자와 오버 플로우/ 언더 플로우 (0) | 2025.05.19 |
자바 싱글톤 패턴 (Singleton Pattern) (0) | 2025.05.18 |
Java의 this 키워드 (1) | 2025.05.18 |
break와 continue 상세 설명 (0) | 2025.05.18 |