단항 연산자는 피연산자가 단 하나뿐인 연산자를 말한다.
부호 연산자는 양수 및 음수를 표시하는 +, -를 말한다. 부호 연산자는 변수의 부호를 유지하거나 변경할 때 사용하며 주의할 점은, 부호 연산자의 결과가 int 타입이라는 것이다.
// 잘못된 코딩 예시
byte b = 100;
byte result = -b;
위의 코드는 컴파일 에러가 발생한다. 부호 연산의 결과는 int 타입이므로 int 타입 변수에 저장해야 한다.
// 올바른 코딩 예시
byte b = 100;
int result = -b;
증감 연산자는 변수의 값을 1 증가, 감소 시키는 연산자를 말한다. boolean 타입을 제외한 모든 원시 타입의 피연산자에 사용할 수 있다. ++연산자
는 증가연산자
, --연산자
는 감소연산자
라고 부른다.
연산식에서 증감연산자만 사용된다면 증감연산자의 위치는 상관없다.
// 모두 i = i + 1;로 동일
++i;
i++;
// 모두 i = i -1;로 동일
--i;
i--;
❗️그러나 다른 연산자와 함께 사용할 경우, 증감 연산자의 위치에 따라 연산식의 결과가 다르게 나오므로 주의해야 한다.
예시)
int x = 1;
int y = 1;
int result1 = ++x + 10; //결과값: 12 -(1)
int result2 = y++ + 10; //결과값: 11 -(2)
// (1): x의 값이 1 증가한 후 연산을 수행하여 결과값 12가 도출된다.
// (2): 우선 y=1을 사용하여 다른 연산을 먼저 수행한 후 y의 값을 1 증가시킨다.
예시를 통한 결과값의 차이를 보면 알 수 있듯이, 증감 연산자가 변수 앞에 있을 경우 우선 변수값을 1 증가 또는 1 감소 시킨 후 다른 연산자를 처리한다. 반면, 증감 연산자가 변수 뒤에 있으면 다른 연산자를 먼저 처리한 후 변수 값을 1 증가 또는 1감소 시킨다.
++i
와i = i + 1
의 연산 속도 차이
많은 사람들이++i
가= 연산자
와+ 연산자
를 통한 두 번의 연산이 필요한 것이 아닌++ 연산자
를 통한 한 번의 연산만 수행하기 때문에 연산 속도가 빠르다고 알고 있다. 하지만 컴파일해서 생성된 두 경우의 바이트 코드를 비교해보면 동일하다고 한다. 따라서 연산 속도 차이는 없다!
논리 부정 연산자는 조건문과 제어문에서 조건식의 값을 부정하도록 하여 실행 흐름을 제어할 때 주로 사용한다. 또한 두 가지 상태(true/false)를 번갈아가며 변경하는 토글 기능을 구현할 때도 사용된다.
Ref.
책: 혼자 공부하는 자바