목차
github.com/whiteship/live-study/issues/3
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선순위
- (optional) Java 13. switch 연산자
산술 연산자
+, -, *, /, &
연산자 |
기능 |
+ |
두 연산자의 값을 더함 |
- |
왼쪽의 피연산자 값에서 오른쪽의 피연산자 값을 뺌 |
* |
두 피연산자의 값으 곱함 |
/ |
왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눔 |
& |
왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 나머지 반환 |
비트 연산자
연산자 |
기능 |
& |
비트단위로 AND 연산 |
| |
비트단위로 OR 연산 |
^ |
비트단위로 XOR 연산 |
~ |
피연산자의 모든 비트를 반전시켜 얻은 결과 반환 |
관계 연산자
연산자 |
기능 |
< |
왼쪽이 오른쪽보다 작은가? |
> |
왼쪽이 오른쪽보다 큰가? |
<= |
왼쪽이 오른쪽보다 같거나 작은가? |
>= |
왼쪽이 오른쪽보다 같은나 큰가? |
== |
왼쪽과 오른쪽이 같은가? |
!= |
왼쪽과 오른쪽이 다른가? |
논리 연산자
연산자 |
기능 |
&& |
왼쪽과 오른쪽 모두 true이면 연산결과는 true |
|| |
왼쪽과 오른쪽 둘 중 하나라도 true이면 연산결과는 true |
! |
기존 연산결과와 반대 |
instanceof
- instanceof는 실제 인스턴스의 자료 형을 묻는 것이 아니라 상속 관계를 바탕으로 형 변환이 가능한지를 확인하는 연산
- 부모 클래스(A)보다 자식 클래스(B)는 더 많은 기능을 담고 있다.
- 그러므로 자식 클래스(B)는 부모 클래스(A)로 형변환이 가능하다고 본다.
- 이런 경우 B instanceof A → true
- A instancdeof B → false
assignment(=) operator
- 연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입
int sum = 0;
화살표(→) 연산자
- 화살표 연산자는 람다식 표현에 사용되는 연산자
람다식 표현이란?
- 함수의 정의를 따로 만들지 않고 실제 사용되는 코드 부분에서 함수를 정의하여 사용하는 것
(매개변수, ...) → {함수 실행문}
- 결국 화살표 연산자(→)는 매개변수를 넘겨서 함수를 실행한다는 의미이다.
3항 연산자
조건에 따라 참 일 때와 거짓 일 때 처리해야 되는 분기가 달라지는 경우가 꽤 많이 있다.
그때 주로 사용하는 것이 if ~ else 표현이지만 그런 코드를 한 줄(3항 연산자)로 요약 가능하다.
if ~ else
if(something) {
// if something
}
else
{
// else something
}
3항 연산자
boolean bl = 4 < 5 ? true : false;
- 위와 같이 3항 연산자를 사용하면 간단한 if ~ else 구문을 한 줄의 코드로 변환 가능하다.
연산자 우선순위
연산기호 |
우선순위 |
[], . |
1 |
expr++, expr-- (후위 연산자) |
2 |
++expr, --expr (전위 연산자) |
3 |
*, /, % |
4 |
+, - |
5 |
<<, >>, >>> |
6 |
<, >, <=, >=, intanceof |
7 |
==, != |
8 |
& |
9 |
^ |
10 |
| |
11 |
&& |
12 |
|| |
13 |
? expr : expr (3항 연산자) |
14 |
=, +=, -=, *=, /=, %=, ^=, |=, <<=, >>=, >>>= |
15 |
- 위 연산자 우선순위에서 중요하게 봐야 할 부분은 아래와 같다.
- 후위 연산자보다 전위 연산자가 우선순위가 높다.
- 덧셈, 뺄셈보다 곱하기, 나누기, 나머지 연산이 우선순위가 높다.
- 또한 사칙 연산에 대한 결합 방향이 존재하고, 결합 방향은 일반적인 사칙 연산의 방향(왼쪽 → 오른쪽)과 동일하다.
Java 13. Switch
- 기존 Switch에서는 : 사용하여 조건에 대한 처리를 진행
- Java 13에서는 화살표 연산자(→) 사용 가능
기존
switch(val) {
case 'a' :
// something 'a'
break;
case 'b' :
// something 'b'
break;
}
Java 13
switch(val) {
case 'a' -> System.out.println('a');
case 'b' -> System.out.println('b');
}
- 위와 같이 사용했을 때의 장점은 break 를 사용하지 않아도 되고, 아래와 같이 표현 식으로도 사용 가능하다.
표현식
System.out.println(
switch(val) {
case 'a' -> "A"
case 'b' -> "B"
case 'c' -> "C"
}
);
T a = switch(val) {
case 'd' -> d;
case 'e' -> e;
default -> f;
};
- 표현식으로 사용하여 변수 할당이나 반환 값으로도 사용 가능하다.