Chapter 03 연산자(Operator)
6. 그 외의 연산자
조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐이다.
조건 연산자는 첫 번째 피연산자인 조건식의 평가결과에 따라 다른 결과를 반환한다.
조건식의 평가결과가 true
이면 식1이, false
이면 식2가 연산결과가 된다. 가독성을 높이기위해 조건식을 괄호()로 둘러싸는 경우가 많지만 필수는 아니다.
result = (x > y) ? x : y;
위의 문장에서 식 x > y
의 결과가 true
이면 result
에는 x
의 값이 저장되고, false
이면 y
의 값이 저장된다.
만일 x
의 값이 5, y
의 값이 3이라면, 이 식은 다음과 같은 과정으로 계산된다.
result = (x > y) ? x : y;
➡️ result = (5 > 3) ? 5 : 3;
➡️ result = (true) ? 5 : 3; // 조건식이 true(참)이므로 연산결과는 5
➡️ result = 5;
대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다. 이 연산자는 오른쪽 피연산자의 값(식이라면 평가값)을 왼쪽 피연산자에 저장한다. 그리고 저장된 값을 연산결과로 반환한다. 예를 들어, 아래의 문장은 변수 x
에 3을 저장하고, 연산결과인 3을 화면에 출력한다.
System.out.println(x = 3); // 변수 x에 3이 저장되고
➡️ System.out.println(3); // 연산결과인 3이 출력된다.
대입 연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 잇기 때문에 식에서 제일 나중에 수행된다. 그리고 연산 진행 방향이 오른쪽에서 왼쪽이기 때문에 x=y=3;
에서 y=3
이 먼저 수행되고 그 다음에 x=y
가 수행된다.
대입 연산자의 왼쪽 피연산자를 'lvalue(left value)'이라 하고, 오른쪽 피연산자를 'rvalue(right value)'라고 한다.
대입연산자의 rvalue는 변수뿐만 아니라 식이나 상수 등이 모두 가능한 반면, lvalue는 반드시 변수처럼 값을 변경할 수 있는 것이어야 한다. 그래서 리터럴이나 상수같이 값을 저장할 수 없는 것들은 lvalue가 될 수 없다.
int i = 0;
3 = i + 3; // 에러. lvalue가 값을 저장할 수 있는 공간이 아니다.
i + 3 = i; // 에러. lvalue의 연산결과는 리터럴(i+3➡️0+3➡️3)
final int MAX = 3; // 변수 앞에 키워드 final을 붙이면 상수가 된다.
MAX = 10; // 에러. 상수(MAX)에 새로운 값을 저장할 수 없다.
대입 연산자는 다른 연산자(op)와 결합하여 op=
와 같은 방식으로 사용될 수 있다. i = i + 3
은 i += 3
과 같이 표현될 수 잇다. 그리고 결합된 두 연산자는 반드시 공백없이 붙여 써야 한다.
📑 원본 자료
- Java의 정석(3판) [남궁 성/도우출판/2016]