LinkedIn

자바 스터디 3주차 : 연산자

2020. 11. 27. 23:42 | 자바 개발자되기

목차

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;
};
  • 표현식으로 사용하여 변수 할당이나 반환 값으로도 사용 가능하다.