Java에서는 증가(++), 감소(--) 연산자와 관련하여 알아두면 유용한 흥미로운 특징들이 많습니다. 이 글에서는 대표적인 두 가지 규칙을 예제 코드와 함께 살펴보겠습니다.
1. final 변수에는 증감 연산자를 사용할 수 없다
첫 번째 특징은 final 키워드로 선언된 변수에는 증가·감소 연산자를 사용할 수 없다는 점입니다. 그 이유는 final 변수는 한 번 값이 초기화되면 프로그램 실행 중에 절대 변경할 수 없기 때문입니다. 증감 연산자는 본질적으로 변수의 값을 수정하는 연산이므로, final 변수에 적용하면 컴파일 오류가 발생합니다.
예제 코드
public class Demo{
public static void main(String[] args){
final int my_val = 34;
int my_val_2 = ++my_val;
System.out.println("The value is :");
System.out.println(my_val_2);
}
}실행 결과
/Demo.java:6: error: cannot assign a value to final variable my_val
int my_val_2 = ++my_val;
^
1 error위 코드를 실행하면 "final 변수 my_val에 값을 할당할 수 없다"는 컴파일 에러가 발생합니다. 이처럼 final 변수의 불변성(immutability)은 컴파일러 수준에서 엄격하게 보호됩니다.
2. 증감 연산자의 중첩(Nesting)은 허용되지 않는다
두 번째 특징은 ++ 또는 -- 연산자를 여러 겹으로 중첩해서 사용할 수 없다는 것입니다. 예를 들어 ++(++변수) 형태의 코드는 문법적으로 허용되지 않습니다.
그 이유는 증감 연산자는 반드시 변수(variable)에 적용해야 하지만, 내부의 ++my_val_1 연산 결과는 변수가 아닌 하나의 값(value)이기 때문입니다. 값에는 다시 증감 연산자를 적용할 수 없으므로 컴파일 오류가 발생합니다.
예제 코드
public class Demo{
public static void main(String[] args){
int my_val_1 = 99;
int my_val_2 = ++(++my_val_1);
System.out.println("The value is ");
System.out.println(my_val_2);
}
}실행 결과
/Demo.java:6: error: unexpected type
int my_val_2 = ++(++my_val_1);
^
required: variable
found: value
1 error에러 메시지에서 확인할 수 있듯이, 컴파일러는 "변수(variable)가 필요한 위치에 값(value)이 발견되었다"고 알려줍니다.
정리
- final 변수는 값 변경이 불가능하므로 증감 연산자를 적용하면 컴파일 오류가 발생합니다.
- 증감 연산자는 변수에만 적용할 수 있으며, 연산 결과(값)에 다시 중첩해서 사용할 수 없습니다.
이 두 가지 규칙을 기억해 두면 Java 코드 작성 시 불필요한 컴파일 오류를 예방하고, 증감 연산자의 동작 원리를 더 깊이 이해하는 데 도움이 됩니다.