가장 먼저 다룰 연산자는 높은 연산 우선순위를 가지고 있는 단항 연산자입니다. 단항 연산자는 피연산자가 하나인 연산자로 오른쪽에서 왼쪽으로 연산되는 특징을 갖고있습니다.
증감 연산자는 피연산자의 값을 1 증가 또는 감소시키는 연산자입니다. 단항 연산자는 모두 피연산자의 왼쪽에 사용하지만, 증감 연산자는 피연산자의 왼쪽이나 오른쪽에 올 수 있습니다. boolean을 제외한 기본형에서 사용 가능합니다.
위치에 따라 다시 전위, 후위로 나뉘는에 이에 대해서는 잠시 후에 다루도록 하겠습니다.
public class Operator {
public static void main(String[] args) {
int num = 1;
num++;
System.out.println(num);
num = 1; //다시 num을 1로 초기화
++num;
System.out.println(num);
}
}

증감 연산자는 피연산자의 왼쪽에 사용되면 전위형, 오른쪽에 사용되면 후위형이라고 부릅니다. 두 형태간의 차이는 무엇일까요?
다음 코드를 봅시다. 같은 증감 연산자인데 위치에 따라 결과가 다르게 나옵니다.
public class Operator {
public static void main(String[] args) {
int num = 1;
System.out.println(++num); //전위형
num = 1;
System.out.println(num++); //후위형
}
}
이렇게 나온 이유는 전위형과 후위형의 차이 때문입니다.
전위형은 피연산자의 값을 참조하기 전에 1을 증가시킵니다. 반대로 후위형은 피연산자의 값을 참조하고 1을 증가시키게 됩니다.
그렇기 때문에 전위형을 쓴 코드에서는 println() 메소드가 num이 1이라는 것을 참조하기 전에 num에 1을 증가시켜서 2가 된 것이고, 후위형을 사용한 코드에서는 println()가 num을 참조해서 실행(로그에 출력)한 뒤에 1을 증가시켰기 때문에 1이라는 숫자가 출력된 것 입니다.
간단히 이야기하자면
후위형은 해당 명령줄이 다 실행한 후에 1을 증가시킨다~라고 생각해도 좋습니다.
다음 코드를 보시면 해당 줄 명령이 수행된 후에 1이 증가되었음을 알 수 있습니다.public class Operator { public static void main(String[] args) { int num = 1; System.out.println(num++); System.out.println(num); } }
또한 지금처럼 다른 명령이 있는 경우에는 다른 결과를 보이지만, 증감 연산자와 피연산자가 단독으로 있는 명령에서는 아무런 영향도 없습니다.
public class Operator { public static void main(String[] args) { int num = 1; num++; System.out.println(num); num = 1; ++num; System.out.println(num); } }
부호 연산자는 피연산자의 부호를 변경하는데 사용됩니다. 숫자가 아닌 boolean, char형에는 사용할 수 없습니다.
더 간단하게 표현하자면 +는 피연산자에 1을 곱하고, -는 피연산자에 -1을 곱한다고 생각하시면 됩니다.
int num = 1;
System.out.println(-num);

비트 반전 연산자 ~는 정수형과 char형에만 사용할 수 있습니다. 해당 데이터를 2진수로 변환했을 때 비트 반전(0은 1로, 1은 0으로 반전)을 수행합니다.
부정 연산자 !는 boolean형에만 사용할 수 있습니다. !는 true를 false로, false를 true로 변경합니다.
boolean flag = true;
System.out.println(!flag);
