Java 9. Java 연산자 우선 순위와 조건 연산자 (삼항 연산자)
페이지 정보
본문
안녕하세요. 소심비형입니다. Java는 연산자가 참 많은데요. 한번에 모든걸 다루기는 무리입니다. 여러번 나눠서 진행하게 될거 같아요. 하지만, 급하신분은 Google 또는 [ docs.oracle.com ]에서 관련 자료들을 찾아볼 수 있고 당연히 여기보단 [ docs.oracle.com ]이 잘 설명되어 있습니다^^;
연산자 우선 순위와 결합성
범주 |
연산자 |
설명 |
기본 연산자 |
expr++ expr-- |
후위 증가 후위 감소 |
단항 연산자 |
++expr --expr ~ ! |
전위 증가 전위 감소 비트 부정 연산 논리적 OR |
승제 연산자 |
* / % |
곱하기 나누기 나머지 |
가감 연산자 |
+ - |
더하기 빼기 |
시프트 연산자 |
<< >> >>> |
왼쪽 시프트 오른쪽 시프트 Unsigned 오른쪽 시프트 (C#에는 없는 자바 고유 연산자) |
관계 연산자 |
< > <= => instanceof |
보다 작음 보다 큼 작거나 같음 크거나 같음 인스턴스와 같거나 하위 인스턴스일 경우 true를 반환 |
같음 연산자 |
== != |
같음 같지 않음 |
논리 AND |
& |
정수 비트 AND, Boolean 논리곱 AND |
논리 XOR |
^ |
정수 비트 XOR, Boolean 논리곱 XOR |
논리 OR |
| |
정수 비트 OR, Boolean 논리곱 OR |
조건부 논리곱 연산자 |
&& |
앞의 조건이 참인 경우에만 뒤의 조건을 계산 |
조건부 논리합 연산자 |
|| |
앞의 조건이 거짓인 경우에만 뒤의 조건을 계산 |
조건 연산자 |
C ? X : Y |
조건(C)이 참이면 X로 계산하고 거짓이면 Y로 계산 |
대입 |
= += -= *= /= %= &= ^= |= <<= >>= >>>= |
할당 더하기 후 할당 빼기 후 할당 곱하기 후 할당 나누기 후 할당 나머지 후 할당 정수 비트 AND 후 할당 정수 비트 XOR 후 할당 정수 비트 OR 후 할당 왼쪽 시프트 후 할당 오른쪽 시프트 후 할당 Unsigned 오른쪽 시프트 후 할당 |
아래와 같이 main에 코드를 추가한 후 실행해 봅니다.
public static void main(String[] args)
{
System.out.println(1 * 2 + 3 * 4);
System.out.println(1 * (2 + 3) * 4);
System.out.println(1 - (2 + 3) / 4);
}
결과는 여러분이 예상하는데로 나올겁니다. 아래처럼요.
14
20
0.25
하지만, 위와 같지는 않죠-_-; 부동 소수점은 자동으로 int로 converting되면서 소수점은 버려집니다.
14
20
0
이렇게 나오게 됩니다. 이전 강좌인 자료형에 대한 내용을 기억 하신다면 한번에 맞추지 않았을까 생각되네요. 식에 연산자가 여러 개 있는 경우 연산자의 우선 순위에 따라 각 연산자가 계산됩니다. x + y * z와 같은 식은 결국 x + (y * z)와 같이 계산되는데 이것은 *연산자의 우선 순위가 이진 + 연산자의 우선 순위보다 높기 때문이죠. 다 아시는 내용이라 생각되지만... 만약, 우선 순위가 같은 두 개의 연산자 사이에 피연산자가 있으면 이 두 연산자간의 결합성에 따라 연산의 순서가 결정됩니다.
대입 연산자를 제외하고 모든 이항 연산자는 왼쪽부터 결합됩니다. x + y +z는 (x + y) + z와 같습니다. 반면에 대입 연산자와 조건 연산자(?:)는 오른쪽부터 결합됩니다. x = y = z는 x = (y = z)와 같이 계산됩니다. 여기에서 알 수 있듯이 개발자는 괄호를 이용하여 연산에 의한 제어를 변경할 수 있게됩니다. 이러한 연산의 우선 순위에 따라 전혀 다른 결과가 나오므로 정확하게 알고 사용해야 겠습니다.
위에 나온 조건 연산자(?:)를 확인하기 위해 Main의 내용을 아래 코드로 대체합니다.
public static void main(String[] args) {
String result = (10 % 2) == 0 ? "짝수" : "홀수";
System.out.println(result);
}
나머지가 없으므로 짝수가 나옵니다. 보통 odd / even을 판단하는 가장 보편적인 방법이며 위의 문법을 삼항 연산자라고 합니다. 용어에 대해 잠깐 설명하자면, 가장 기초가 되는 단항 연산자가 있습니다. 이는 보통 x++, x--과 같이 사용됩니다. 그리고 일반적으로 많이 쓰이는 이항 연산자가 있습니다. a = x + y와 같이 사용됩니다. 마지막으로 삼항 연산자는 ?: 하나 뿐입니다. 삼항 연산자 또는 조건 연산자는 3개의 피연산자를 취하며 boolean ? true : false와 같은 중위 표기법을 사용합니다.
여기서 boolean은 컨디션으로 값은 항상 true 또는 false가 와야 합니다. 이는 특별히 복잡한 식을 가지지 않는다면 좀 더 간결하게 코드를 작성할 수 있으며 가독성면에서도 좋기에 자주 사용됩니다.
public static void main(String[] args)
{
String result = "";
if (10 % 2 == 0)
{
result = "짝수";
}
else
{
result = "홀수";
}
}
위의 코드보다 조건 연산자가 더 효율적이며 생산성이 좋다는 것은 아실겁니다. 지금까지 알아본 연산자와는 다르게 조건 연산자는 오른쪽에 결합성이 있습니다. a ? b : c ? d : e식은 (a ? b : c) ? d : e가 아닌 a ? b : (c ? d : e)로 계산됩니다. 아쉽게도 [ C#의 연산자 오버로딩 ]은 자바에서 사용할 수 없습니다.
다음 시간에...
- 이전글10. Java 관계 연산자 20.08.18
- 다음글8. Java의 정수형. (int와 Integer) 20.08.18
댓글목록
등록된 댓글이 없습니다.