단항 연산자 (증감 연산자, 부호 연산자, 비트전환 연산자, 논리부정 연산자) 에 대해 알아본다.
1. 증감 연산자 ( ++, -- )
2. 부호 연산자 ( +, - )
3. 비트전환 연산자 ( ~ )
4. 논리부정 연산자 ( ! )
● 연산자는 크게 보면 단항 연산자, 이항 연산자, 삼항 연산자로 나뉘는데, 나뉘는 기준은 연산을 할 때 연산 대상이 되는 피 연산자의 개수가 몇 개냐가 기준이 된다.
따라서 피 연산자가 1개인 경우 단항 연산자, 2개인 경우 이항 연산자, 3개인 경우 삼항 연산자라고 생각하면 된다.
● 연산자는 연산을 하는 방향과, 여러 연산자가 같이 있을 때 어느 연산을 먼저 하는가 에 대한 연산 우선순위가 있으므로 아래 표를 참조하도록 하자.
예를 들어 「-2 + 3」이란 수식이 있다면 단항 연산자가 이항 연산자보다 우선순위가 높기 때문에 단항 연산자 중 하나인 부호 연산자가 2에 -1을 곱해 부호를 바꿔 -2를 만들고 그다음 -2와 3을 더하는 연산이 이항 연산자 중 하나인 사칙 연산자에 의해 이루어진다.
다만, 연산 순위가 잘 이해되지 않는다면 괄호를 적절히 사용해서 우선순위를 지정해 주는 것도 하나의 방법이 될 수 있다.
분류 | 연산자 | 연산방향 | 연산순위 | ||
단항 연산자 | 증감 연산자 | ++ -- | 🡸 | 1 |
|
부호 연산자 | + - | 🡺 | |||
비트전환 연산자 | ~ | 🡺 | |||
논리부정 연산자 | ! | 🡺 | |||
이항 연산자 |
산술 연산자 | 나머지 연산자 | % | 🡺 | 2 |
사칙 연산자 |
* / | 🡺 | |||
+ - | 🡺 | 3 | |||
쉬프트 연산자 | << >> >>> | 🡺 | 4 | ||
비교 연산자 | 대소비교 연산자 | < > <= >= instanceof | 🡺 | 5 | |
등가비교 연산자 | == != | 🡺 | 6 | ||
논리 연산자 |
비트 연산자 |
& | 🡺 | 7 | |
^ | 🡺 | 8 | |||
| | 🡺 | 9 | |||
논리 연산자 |
&& | 🡺 | 10 | ||
|| | 🡺 | 11 | |||
그 외 연산자 | 삼항 연산자 | ? : | 🡺 | 12 | |
대입 연산자 (할당 연산자) | = *= /= %= += -= <<= >>= >>>= &= |= ^= | 🡸 | 13 |
● 증감 연산자, 부호 연산자, 비트전환 연산자, 논리부정 연산자 단항 연산자로 분류되며 각 연산자의 상세 내용은 아래에서 확인하자.
※ 증감 연산자는 피 연산자의 값을 1 증가시키거나 1 감소시키는 연산자이며 boolean형을 제외한 모든 기본형 변수에 사용 가능하다.
증가연산자 | ++ | 피연산자의 값을 1증가시킨다. |
감소연산자 | -- | 피연산자의 값을 1감소시킨다. |
※ 증감 연산자는 피 연산자의 왼쪽(전위형) 또는 오른쪽(후위형)에 사용 가능하다.
전위형 | ++i, --i | 피 연산자의 값을 먼저 증감한 후에 읽어온다. |
후위형 | i++, i-- | 피 연산자값을 먼저 읽어온 후에 값의 증감 처리를 진행한다. |
증감 연산자 단독으로 쓰인 경우는 전위형이나 후위형의 결괏값의 차이가 없으나, 증감 연산자가 수식에 사용되거나 함수의 매개변수에 사용될 때는 전위형이냐 후위형이냐에 따라서 연산 순서가 다르기 때문에 결괏값이 다를 수 있다.
int i = 3;
System.out.println(++i); //i의 출력값:4 (i값을 증가시킨후 읽어옴)
System.out.println(i); //i의 출력값:4
int j = 3;
System.out.println(j++); //j의 출력값:3 (j값을 먼저 읽어서 출력한 후 j값을 증가시킴)
System.out.println(j); //j의 출력값:4
※ 증감 연산자는 수식을 간략화할 수 있고, 적은 명령으로 작업을 수행하기 때문에 연산 수행과정이 빠른 장점이 있다.
예를 들어 「i=i+1」과 「++i」의 결괏값은 값지만 컴파일 후 생성되는 클래스 파일의 바이트코드 명령어를 비교해보면 「i=i+1」의 경우 5개의 명령어가 사용된 반면 「++i」의 경우 2개의 명령어가 사용되어 더 적은 명령으로 작업을 수행한 것을 확인할 수 있다.
※ 부호 연산자는 피 연산자의 부호를 바꿀 때 사용되는 연산자이며 boolean형, char형을 제외한 모든 기본형 변수에 사용 가능하다.
부호연산자 | + | 피연산자에 1을 곱한다. |
- | 피연산자에 -1을 곱한다. |
int i = -3;
System.out.println(i); //i의 출력값:-3
i = -i;
System.out.println(i); //i의 출력값:3
※ 부호 연산자는 더하기 빼기와 같이 사칙연산을 하는 산술 연산자와는 다르다.
산술 연산자의 경우 피 연산자가 2개 필요하므로 단항 연산자가 아닌 이항 연산자에 속한다.
※ 비트전환 연산자는 피 연산자를 2진수로 표현했을 때 0은 1로 1은 0으로 바꾸는 연산자이며, 정수형과 char형에만 사용될 수 있다.
~ | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
※ 논리부정 연산자는 boolean형 에만 사용 가능하며 true인 경우 false로 false인 경우 true로 변환한다.
반복문이나 조건식에 많이 사용이 되는 연산자 중 하나이다.
boolean result = true;
System.out.println(result); //출력값:true
System.out.println(!result); //출력값:false
【연산자】2. 이항 연산자 (Binary Operator)_산술(나머지) 연산자
【연산자】3. 이항 연산자 (Binary Operator)_산술(사칙) 연산자
【연산자】4. 이항 연산자 (Binary Operator)_산술(쉬프트) 연산자
글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --
'▹ 주요 언어 > JAVA' 카테고리의 다른 글
Java 식별자(identifier) 정의 규칙 (0) | 2024.02.15 |
---|---|
JAVA Map의 키(key)값을 모를 때 값(value) 확인하려면? (0) | 2023.07.02 |
【연산자】4. 이항 연산자 (Binary Operator)_산술(쉬프트) 연산자 (0) | 2022.11.25 |
【연산자】3. 이항 연산자 (Binary Operator)_산술(사칙) 연산자 (0) | 2022.11.20 |
【연산자】2. 이항 연산자 (Binary Operator)_산술(나머지) 연산자 (1) | 2022.11.01 |