가장 먼저 다룰 연산자는 높은 연산 우선순위를 가지고 있는 단항 연산자
입니다. 단항 연산자
는 피연산자가 하나인 연산자로 오른쪽에서 왼쪽으로 연산되는 특징을 갖고있습니다.
증감 연산자
는 피연산자의 값을 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);