연산자란?
연산자는 연산을 수행하는 기호.. 쉽게 말하면 + 더하기 - 빼기 * 곱하기 / 나누기등을 수행 해주는 기호를 말한다
자바에는 사칙연산 (+ - * /) 외에도 다양한 연산기호들이 존재한다.
연산자가 연산을 수행하려면 당연히 연산의 대상이 있어야 하는데 연산 당하는 녀석들을 피연산자(operand) 라고 한다.
연산자(operator) 연산을 수행하는 기호 (+, -, *, / 등)
피연산자(operand) 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
x + 5 // 변수 x, 리터럴 5는 피연산자 덧셈(+)기호는 연산자
연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙 연산(+, -, *, /)과 나머지연산 (%) |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | "그리고(AND)"와 "또는(OR)"으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기 타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof연산자 |
꽤 많은 연산자가 있지만 카테고리별로 나누면 생각보다 많지 않고 쓰다보면 외워진다.
연산자의 우선순위, 결합규칙
식에 사용된 연산자가 두개 이상이면 연산자의 우선순위로 연산순위가 결정되는데
수학에서 배운것과 같이 곱셈과 나눗셈(*, /)이 덧셈과 뺄셈(+, -)보다 우선순위가 높다
식 | 설명 |
-x + 3 | x의 부호를 먼저 바꾸고 덧셈이 수행된다, x에 붙어있는 -는 뺄셈 연산자가 아닌 부호 연산자 |
x + 3 * y | 곱셈이 먼저 수행된 뒤 덧셈이 수행된다 (3 * y 가 먼저 수행) |
x + 3 > y - 2 | x + 3과 y - 2를 각각 수행한 뒤 비교 연산자가 수행된다 |
x > 3 && x < 5 | 논리 연산자 && 보다 비교 연산자 > , < 가 먼저 수행된다. (식의 의미 : x가 3보다 크고 x가 5보다 작은가?) |
result = x + y * 3; | 대입 연산자는 연산자 중 가장 우선순위가 낮다. 우측의 모든 연산이 끝난 뒤 그 값이 변수result에 저장된다. |
위의 표를 본다면 대부분의 연산순서는 어렵지 않게 알수 있는 수준이라고 생각한다.
하지만 상식만으로 판단하기 어려운 우선순위들도 많이 있다.
식 | 설명 |
x << 2 + 1 | 쉬프트 연산자 << 는 덧셈 연산자보다 우선순위가 낮다. |
data & 0xFF == 0 | 비트연산자 &는 비교연산자 == 보다 우선순위가 낮아 비교연산 후 비트연산이 이루어진다 왼쪽의 식은 data & (0xFF == 0) 과 같다. |
x < -1 || x > 3 && x < 5 | 논리 연산자는 AND(&, &&)가 OR(|, ||)보다 우선순위가 높다 왼쪽의 식은 x < -1 || (x > 3 && x < 5) 이다. |
하나의 식에 같은 우선순위의 연산자들이 여러 개 있는 경우는? 연산자의 결합규칙으로 연산이 된다.
연산자의 결합규칙은 연산자마다 다르지만 대부분 왼쪽에서 오른쪽으로 연산되고
단항 연산자와 대입 연산자만 그 반대로 오른쪽에서 왼쪽으로 연산을 수행하게 된다.
1. 산술 > 비교 > 논리 > 대입. 대입은 가장 마지막에 수행된다.
2. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
종류 | 결합규칙 | 연산자 | 우선순위 |
단항 연산자 | ← | ++ -- + - ~ ! (type) | 높음↑ 낮음↓ |
산술 연산자 | → | * / % | |
→ | + - | ||
→ | << >> | ||
비교 연산자 | → | < > <= >= instanceof | |
→ | == != | ||
논리 연산자 | → | & | |
→ | ^ | ||
→ | | | ||
→ | && | ||
→ | || | ||
삼항연산자 | → | ? : | |
대입 연산자 | ← | = += -= *= /= %= <<= >>= &= ^= |= |
!. 위 표의 단항연산자에 있는 +와 -는 부호연산자이고 (type)은 형변환(casting) 연산자
가끔 if문을 작성할때 연산순서가 헷갈려 문제가 생기고는 했다
이런 어이없는 실수들 때문에 야근 했던게 생각난다..
연산의 우선순위를 정리 할수 있어 좋았다!
댓글