[Java] 연산자(operator) 정리
1. 연산자란❓
'연산을 수행하는 기호'를 뜻한다. 예를 들어 '+'기호는 덧셈 연산을 수행하며, '덧셈 연산자'라고 한다. 자바에서는 사칙연산(+, -, *, /)을 비롯하여 다양한 연산자들을 제공한다.
1️⃣ 연산자와 피연산자
연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데, 이것을 '피연산자(operand)'라고 한다.피연산자로 상수, 변수 또는 식 등을 사용할 수 있다.
연산자 : 연산을 수행하는 기호 (+, -, *, / 등)
피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
예를 들어 'x + 2' 라는 수식이 있다면 연산자는 '+' 피연산자는 각각 'x'와 '2'에 해당한다.
2️⃣ 식과 대입연산자
연산자와 피연산자를 조합하여 계산하고자 하는 바를 표현한 것을 '식(expression)'이라고 한다. 그리고 식을 계산해서 결과를 얻음은 '식을 평가(evaluation)'이라고 한다. 아래의 식에서 x가 3일 때,
2 * x + 3
식을 평가한 결과는 9가 되는 것이다. 작성한 식을 프로그램에 포함시키려면 끝에 세미콜론(;)을 붙여 문장으로 만들어야 한다.
3️⃣ 연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙연산과 나머지 연산 |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | '그리고(AND)'와 '또는(OR)'으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
- 피연산자의 개수에 의한 분류
- 3 - 5 // 앞에 -는 뺄셈이 아닌 부호 연산자
위의 경우와 같이 왼쪽의 '-'는 부호 연산자이고, 오른쪽의 것은 '뺄셈 연산자'이다. 이처럼 서로 다른 연산자의 기호가 같은 경우는 피연산자의 개수로 구분이 가능하다.
이처럼 연산자를 기능별, 피연산자의 개수별로 나누어 분류하는 것은 '연산자의 우선순위' 때문이기도 하다.
4️⃣ 연산자의 우선순위와 결합 규칙
하나의 식에서 같은 우선순위의 연산자들이 여러 개 있는 경우, 어떤 순서로 연산을 수행할까? 우선순위가 같다고 해서 아무거나 먼저 처리하는 것이 아니고 나름대로 규칙을 지니고 있다. 이것을 '연산자의 결합 규칙'이라고 한다.
1) 산술 > 비교 > 논리 > 대입 순서대로 수행한다.
2) 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자 보다 높다.
3) 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
연산자의 우선순위와 결합 규칙
출처 - https://mgyo.tistory.com/227
❗ 단항 연산자에 있는 '+'와 '-'는 부호 연산자이고, '(type)'은 형변환 연산자이다.
❗ instanceof는 객체의 타입을 확인하는 데 사용되는 연산자이다.
5️⃣ 산술 변환(usual arithmetic conversion)
이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르다면 연산 전에 형변환 연산자로 타입을 일치 시켜야 한다. 예를 들어 int 타입과 float 타입을 덧셈하는 경우, 형변환 연산자를 사용해서 피연산자의 타입을 둘 다 int 또는 float로 일치시켜야 한다.
int i = 10;
float f = 20.0f;
float result = f + (float)i; // 두 피연산자의 타입을 일치시킨다.
대부분의 경우 더 큰 타입으로 일치시킨다. 그 이유는 작은 타입으로 형변환하면 원래의 값이 손상될 우려가 생길 수 있다. 예를 들어 char나 short의 표현 범위가 좁아서 연산 중에 오버플로우(overflow)가 발생할 가능성이 높음.
하지만 작은 타입에서 큰 타입으로 형변환하는 경우, 자동적으로 형변환이 되어 연산자를 생략할 수 있다.
이처럼 연산 전에 피연산자 타입의 일치를 위해 자동 형변환 되는 것을 '산술 변환' 또는 일반 산술 변환'이라고 하며,
이 변환은 이항 연산뿐만 아니라 단항 연산에서도 일어난다.
정리하자면 산술 변환이란 ❓
연산 수행 직전에 발생하는 피연산자의 자동 형변환
1) 두 피연산자의 타입을 같게 일치시킴(보다 큰 타입으로 일치시킴)
2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환
참고문헌 -
자바의 정석 3판 남궁성 지음
image -
https://www.flaticon.com/kr/free-icon/mathematical-operations_18208?term=%EC%97%B0%EC%82%B0&page=1&position=4&page=1&position=4&related_id=18208&origin=search