연산자(operator)
연산자는 ‘연산을 수행하는 기호’를 말하며 ‘+’기호는 덧셈 연산자라고 하며 덧셈 연산을 수행한다. 사칙 연산(+, -, *, /)을 비롯하여 다양한 연산자를 이용한다.
연산자와 피연산자
o 피연산자(operand) : 연산을 수행하기 위한 연산의 대상으로 상수, 변수 식(式) 등을 사용할 수 있다.
o 연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.
연산자(operator) : 연산을 수행하는 기호 (+,-,*,/ 등)
피연산자(operand) : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
식(式)과 대입연산자
o 식(式)이란 연산자와 피연산자를 조합하여 계산하고자 하는 것을 표현하는 것을 말한다. 식을 계산하여 얻는 것을 ‘식을 평가(evaluation)한다’고 하며 하나의 식을 평가 시 하나의 결과 값을 얻는다.
예) x=5일 때 3 * x +5식을 평가한 결과는 20이 된다.
o 식을 평가한 결과를 저장하는 경우 대입 연산자’=’를 사용하여 변수에 저장하며 저장하지 않고 출력만을 원할 경우에는 println()메소드에 식을 쓰면 된다.
y = 3 * x +5; System.out.println(3 * x +5);
연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙연산(+ - * /), 나머지 연산(%) |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | '그리고(AND)'와 '또는(OR)'으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ? : instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
피연산자의 개수에 의한 분류
o 단항 연산자 : 피연산자의 개수가 하나인 연산자로 부호 연산자가 포함된다.
이항 연산자 : 피연산자의 개수가 두개인 연산자로 대부분의 연산자는 이항 연산자이다.
삼항 연산자 : 피연산자의 개수가 세개인 연산자로 삼항 연산자는 오직 ‘? :’ 하나뿐이다.
o 서로 다른 연산자의 기호가 같은 경우에는 피연산자의 개수로 구분이 가능하다.
연산자의 우선순위와 결합규칙
종류 | 결합 규칙 | 연산자 | 우선순위 | |
단항 연산자 | <------------- | ++ -- + - ~ ! (type) | 높음 낮음 |
|
산술 연산자 | -------------> | * / % | ||
-------------> | + - | |||
-------------> | << >> | |||
비교 연산자 | -------------> | > < >= <= instanceof | ||
-------------> | == != | |||
논리 연산자 | -------------> | & | ||
-------------> | ^ | |||
-------------> | | | |||
-------------> | && | |||
-------------> | || | |||
삼항 연산자 | -------------> | ? : | ||
대입 연산자 | <------------- | = += -= *= /= %= <<= >>= &= ^= |= |
식 | 설명 |
-x + 3 | 단항 연산자 > 이항 연산자 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; | 대입 연산자는 연산자 중 우선 순위가 제일 낮기에 맨 마지막에 수행된다. |
연산자의 결합규칙
o 연산자는 대부분 왼쪽에서 오른쪽으로 수행되고 단항 연산자, 대입 연산자만 반대로인 오른쪽에서 왼쪽으로 수행한다.
o 연산자의 우선 순위를 정리하면 다음과 같다.
1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
산술 변환(usual arithmetic conversion)
o 이항 연산자는 연산 시 두 피연산자의 타입이 동일해야 하므로 연산 전 형변환으로 일치시켜야 하는데 작은 타입에서 큰 타입으로 형 변환시 자동으로 형변환이 이루어진다.
o 이처럼 연산 전에 피연산자 타입을 일치시켜주는 것을 산술 변환이라고 하며 이항 연산뿐만 아니라 단항 연산에서도 일어난다. 산술 변환 규칙은 다음과 같다.
1. 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
long + int -> long + long -> long
float + int -> float + float -> float
float + double -> double + double -> double
2. 피 연산자의 타입이 int보다 작은 타입이면 int로 변환된다. (좁은 범위로 인해 오버플로우 발생 가능성)
byte + short -> int + int -> int
char + short -> int + int -> int
증감 연산자 ++ --
o 증감 연산자는 피연산의 값을 1 증가 또는 감소시키며 정수, 실수 모두 가능하나 상수는 불가능하다.
증가 연산자(++) : 피연산자의 값을 1증가시킨다.
감소 연산자(--) : 피연산자의 값을 1 감소시킨다.
o 증감 연산자의 위치에 따라 타입이 달라지며 연산 결과도 달라질 수 있다.
전위형 : 값이 참조되기 전에 증가시킨다. j = ++i;
후위형 : 값이 참조된 후에 증가시킨다. j = i++;
전위형의 경우 피연산자의 값을 먼저 증가시킨 후 변수의 값을 읽어오기에 j에 6이 대입이 되었고 후위형의 경우 변수의 값을 먼저 읽은 후 값을 증가시키기에 j에 5가 대입이 된 후 6으로 증가하였다.
o 바람직한 코드를 위해서 식에 두 번이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 한다.
조건 연산자
o 조건 연산자는 조건식, 식1, 식2 세 개의 피연산자를 필요로 하는 삼항 연산지이며, 삼항 연산자는 조건 연산자 하나뿐이다.
o 조건 연산자는 조건식의 결과에 따라 다른 결과를 반환하며 조건식이 true일 경우 식1, 조선식 false일 경우 식2가 연산 결과가 된다. 가독성을 높이기 위해 괄호( )를 사용하지만 필수는 아니다.
o 조건 연산자의 식1과 식2, 이 두 피연산자의 타입이 다른 경우 이항 연산자처럼 산술 변환이 발생한다.
x = + (mod < 0.5 ? 0 : 0.5) // 0과 0.5의 타입이 다르다.
x = + (mod < 0.5 ? 0.0 : 0.5) // 0과 0.0으로 변환되었다.
'언어 > 자바의 정석' 카테고리의 다른 글
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(2) (0) | 2021.02.03 |
---|---|
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(1) (0) | 2021.02.03 |
[자바의 정석] Chapter 5 배열(Array) 요약 (0) | 2021.01.27 |
[자바의 정석] Chapter 2 변수 (0) | 2021.01.19 |
[자바의 정석] Chapter 1 자바를 시작하기 전 (0) | 2021.01.18 |