
연산자란, 연산을 수행하는 기호를 말한다. 프로그래밍 언어도 수학과 같이 사칙연산들을 제공을 한다.
연산자: 연산을 수행하는 기호 (+,-,*,/등)
피연산자: 연산자의 작업 대상 (변수, 상수, 리터럴, 상수)
ex. x+3이라는 수식에 +는 연산자이고, x와 3은 피연산자이다.
| 종류 | 연산자 | 설명 |
|---|---|---|
| 산술 연산자 | + - * / % << >> | 사칙 연산 (+, -, * , /)과 나머지 연산(%) |
| 비교 연산자 | > < >= <= == != | 크고 작음과 같음과 다름을 비교 |
| 논리 연산자 | && || ! | & ^ ~ | '그리고(AND)'와 '또는(OR)'으로 조건을 연결 |
| 대입 연산자 | = | 우변의 값을 좌변에 저장 |
| 기타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
(type)은 '형변환 연산자'를 의미한다.
| 식 | 설명 |
|---|---|
| -x + 3 | 단항 연산자가 이항연산자보다 우선순위가 높다. 여기서 단항연산자는 -이고 +가 이항연산자이다. |
| x + 3 * y | 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위가 높다. |
| x + 3 > y - 2 | 비교연산자 (>)보다 산술연산자 '+', '-'가 먼저 수행한다. |
| x > 3 && x < 5 | 논리 연산자 '&&'보다 비교 연산자가 먼저 수행된다. |
| result = x + y * 3 | 대입 연산자는 연산자 중에서 제일 우선순위가 낮다. |
위의 표를 보면 우리가 학창시절 수학시간에 배웠던걸로 생각을 하면
쉽게 생각을 할 수 있을 것이다.
| 식 | 설명 |
|---|---|
| x << 2 + 1 | 쉬프트 연산자 (<<)는 덧셈 연산자보다 우선순위가 낮다. |
| data & 0xFF == 0 | 비트 연산자 (&)는 비교 연산자 (==)보다 우선순위가 낮으므로 비교연산 후에 비트연산이 수행된다. |
| x < -1 || x > 3 && x < 5 | 논리 연산자 중에 AND를 의미하는 &, &&가 OR를 의미하는 |, || 보다 우선순위가 높다. |
위의 표를 보면 수학시간에 배웠던걸로는 이해하기가 쉽지 않다. 하지만 위의 표를 잘 상기시키면 우선순위에 대한 문제는 해결될 것이다. 만약 아직도 헷갈린다면 먼저 계산되어야 하는 부분을 괄호로 처리해서 묶어주면 된다.
⚠️ 참고
괄호는 연산자가 아니다. 연산자의 우선순위를 임의로 지정할 때, 사용하는
기호일뿐이다.
하나의 식에 연산자가 여러개 있는 경우 어떤 순서로 처리를 해야할까?
우선순위가 같다고 무작정 처리하는 것이 아니고, 나름의 규칙이 있는데
그것이 연산자의 결합 규칙이다.
💡 요점 정리
1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
2. 단한 > 이항 > 삼항. 단항 연산자의 우선순위가 이항 연산자보다 높다.
3. 단항 연산자와 대입 연산자를 제외한 모든 연산자의 진행방향은 왼쪽에서 오른쪽이다.

규칙
1. 두 피연산자의 타입을 같게 일치 시킨다. (보다 큰 타입으로 일치)
2. 피연산자의 타입이 int보다 작은 타입이면, int로 모두 형변환한다.
모든 연산에서 산술 변환이 일어나지만, 쉬프트 연산자, 증감 연산자는 예외다.
정리
산술 변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
1. 두 피연산자의 타입을 같게 일치 시킨다. (보다 큰 타입으로 일치)
2. 피연산자의 타입이 int보다 작은 타입이면, int로 모두 형변환한다.