-
목표
자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표 (->) 연산자
- 3항 연산자
- 연산자 우선 순위
- (optional) Java 13. switch 연산자
1. 산술 연산자
- 기본적으로 +, -, *, /, % 가 있다.
- / 연산자는 % 연산자와 구별되며 몫을 나타내준다.
- 정수를 나누는 경우 소숫점 아래의 값은 표현해주지 않는다.
- 실수 타입에서는 자동으로 실수형으로 변환된다.
- 정수 값을 0으로 나누는 것을 허용하지 않는다.
- 만약 0으로 나누는 경우 ArithmeticException 을 발생시킨다
- 만약 실수 값을 0.0 으로 나눈다면 Infinity 라고 출력된다.
- 결과가 Infinity 인지 확인하기 위해서는 Double.isInfinite() 메소드를 이용한다
- 또한, 실수 값을 나눴을때 소수점 이하의 값이 무한히 지속된다면 소수점 표기가 오류나는 것이다.
- 이러한 오류를 없애기 위해서는 BigDecimal 클래스를 이용한다.
- % 연산자는 숫자값을 나눴을 때 나머지가 오는 연산자이다.
- / 연산자와 동일하게 0으로 나누는 경우에 ArithmeticException 을 발생시킨다.
- 하지만 0.0 으로 나누는 경우에는 NaN (Not a Number) 라는 특수한 값을 출력한다.
- / 연산자와 마찬가지로 Double.isNaN() 메소드를 통해 확인할 수 있다.
2. 비트 연산자
연산자 논리 설명 & AND 두 비트가 모두 1인경우 에만 1 나머지는 0 | OR 두 비트 중 하나가 1이라면 1 나머지는 0 ^ XOR 비교하는 두 비트가 서로 다르다면 1 같다면 0 ~ NOT 비트의 반전 (1의 보수) - Left Shift <<
- a << b
- 정수 a의 각 비트를 b 만큼 왼쪽으로 이동, 밀려난 오른쪽 비트는 버려지고 왼쪽 비트는 0으로 채워진다.
- Right Shift >>
- a >> b
- 정수 a의 각 비트를 b 만큼 오른쪽으로 이동, 밀려난 왼쪽 비트는 버려지고 오른쪽 비트는 최상위 부호 비트로 채워진다.
- 음수 1, 양수 0
- Unsigned Right Shift >>>
- a >>> b
- 정수 a의 각 비트를 b 만큼 오른쪽으로 이동, 밀려난 왼쪽 비트는 버려지고 오른쪽 비트는 0으로 채워진다.
3. 관계 연산자
- 대소 연산자 ( <, >, <=, >= ) 는 boolean 타입을 제외한 기본 타입에 사용
- 동등 연산자 ( ==, != ) 는 모든 타입에 사용
4. 논리 연산자
- AND ( & ) : T & T -> T
- OR ( | ) : F | F -> F
- XOR ( ^ ) : T ^ T -> T, N ^ N -> T
- NOT ( ! ) : T -> F, F -> T
- && 는 앞의 피연산자가 false 이면 뒤의 피연산자를 확인하지 않고 false
- || 는 앞의 피연산자가 true 이면 뒤의 피연산자를 확인하지 않고 true
5. instanceof
- instanceof 연산자는 객체가 특정 타입의 인스턴스로 형변환을 할 수 있는지 검증하는데 사용된다.
- 객체 instanceof 타입 -> return boolean
- 객체가 null 이라면 instanceof 는 항상 false를 리턴한다.
- instanceof 연산자가 내부적으로 null 체크를 해주기 때문에 따로 체크할 필요가 없다.
6. assignment(=) operator
- 대입 연산자는 모든 연산자들 중에서 가장 낮은 연산순위를 가지고 오른쪽에서 왼쪽으로 진행된다.
- 이러한 과정을 초기화라고도 부른다.
- +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, ^=, |=, =
7. 화살표 (->) 연산자
- Java 8 에 도입 된 람다 식의 구문으로 메소드를 하나의 식으로 표현한 것이다.
// 람다 (int a, int b) -> { return a > b ? a : b; } // return 대신 expression 사용 (int a, int b) -> a > b ? a : b // 매개변수 타입 생략 (a, b) -> a > b ? a : b // 매개변수 1개일 경우 괄호 생ㅇ략 a -> a * a // 본문 문장 1개일 경우 중괄호 생략 (String name, int i) -> System.out.println(name + "=" + i); // switch문에서의 람다식 사용 char c = 'A'; switch (c){ case 'A' -> System.out.println("A"); case 'B' -> System.out.println("B"); case 'C' -> System.out.println("C"); default -> System.out.println("default"); }
8. 3항 연산자
- (조건식) ? (값 또는 연산식) : (값 또는 연산식)
int math = 90; char grade = (math > 90) ? 'A' : 'B';
9. 연산자 우선 순위
- 같은 우선순위르 가진 연산자는 연산 방향이 왼쪽에서 오른쪽으로 수행된다.
- 단향 연산자, 부호 연산자, 대입 연산자는 오른쪽에서 왼쪽으로 수행된다.
10. Java 13. switch 연산자
- 기존의 switch 문에서 기능을 업그레이드한 switch 문이다.
- Java 13 에서 화살표 연산자의 사용, 콜론 ( : ) 제거, yield 리턴 기능이 추가되었다.
- Java 12 에서 break 로 리턴하는 기능이 추가 되었으나, 13 버전에서 yield 로 변경되어 break 문은 13부터는 사용할 수 없다.
// 화살표 연산자 사용, 콜론 ( : ) 제거 char c = 'A'; switch (c){ case 'A' -> System.out.println("A"); case 'B' -> System.out.println("B"); case 'C' -> System.out.println("C"); default -> System.out.println("default"); }
// expression 으로 사용 될 수 있다. char c = 'A'; System.out.println( switch (c){ case 'A' -> "A"; case 'B' -> "B"; case 'C' -> "C"; default -> "default"; });
// yield 로 결과 값을 리턴하여 값을 변수에 저장할 수 있다. char c = 'A'; String str = switch (c){ case 'A' -> "A"; case 'B' -> "B"; case 'C' -> "C"; default -> { String str1 = "default"; yield str1; } };
// yield 는 콜론을 사용하는 기존 switch 문에서도 사용이 가능하다. // yield 가 마치 return 같은 기능을 한다고 보면 된다. char c = 'A'; String str = switch (c){ case 'A': yield "A"; case 'B': yield "B"; case 'C': yield "C"; default: yield "default"; };
※ 출처
www.notion.so/3-4d1abf98a556427b9ad9e4aa6d08a0d5
www.notion.so/3-62eb78800e2f430b84eb60ae2f176811
※ 스터디
github.com/whiteship/live-study/issues/3
'Java' 카테고리의 다른 글
5. 클래스 (0) 2020.12.19 4. 제어문 (0) 2020.12.04 2. 자바 데이터 타입, 변수 그리고 배열 (0) 2020.11.25 1. JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) 2020.11.11 BufferedReader , BufferedWriter (0) 2020.08.28