목표
자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선 순위
- (optional) Java 13. switch 연산자
1. 산술 연산자
연산자 | 설명 | 피연산자 수 | 결과값 |
+ | 합 | 이항 | 숫자 |
- | 차 | 이항 | 숫자 |
* | 곱 | 이항 | 숫자 |
/ | 나눈 몫 | 이항 | 숫자 |
% | 나눈 나머지 | 이항 | 숫자 |
2. 비트 연산자
연산자 | 설명 | 피연산자 수 | 결과값 | 입력 | 결과 | |
& | AND | 이항 | 숫자, boolean | 1 1 0 0 |
1 0 1 0 |
1 0 0 0 |
| | OR | 이항 | 숫자, boolean | 1 1 0 0 |
1 0 1 0 |
1 1 1 0 |
^ | XOR | 이항 | 숫자, boolean | 1 1 0 0 |
1 0 1 0 |
0 1 1 0 |
~ | NOT | 단항 | 숫자, boolean | 1 0 |
0 1 |
int a = 3 & 1; // 0011 & 0001 = 1
int b = 2 | 1; // 0010 | 0001 = 3
int c = 3 ^ 1; // 0011 ^ 0001 = 2
int d = b >> 1; // 0011 에서 왼쪽으로 1칸 이동, 1(0001)
int e = b << 1; // 0011 에서 오른쪽으로 1칸 이동, 6(0110)
int f = ~a; // 0001 -> 1111 1111 1111 1111 1111 1111 1111 1110
// 1000 0000 0000 0000 0000 0000 0000 0000
// ->
// 0100 0000 0000 0000 0000 0000 0000 0000
int g = -2147483648 >>> 1;
https://www.notion.so/3-f3a94e0092664d8aa1debe7e88dec43b
3. 관계 연산자
연산자 | 설명 | 피연산자 수 | 결과값 |
== | 양쪽 값이 같으면 참, 다르면 거짓(같음) | 이항 | boolean |
!= | 양쪽 값이 다르면 참, 같으면 거짓(같지않음) | 이항 | boolean |
> | 왼쪽 값이 크면 참, 같거나 작으면 거짓(큼) | 이항 | boolean |
>= | 왼쪽 값이 크거나 같으면 참, 작으면 거짓(크거나 같음) | 이항 | boolean |
< | 왼쪽 값이 작으면 참, 같거나 크면 거짓(작음) | 이항 | boolean |
<= | 왼쪽 값이 작거나 같으면 참, 크면 거짓(작거나 같음) | 이항 | boolean |
4. 논리 연산자
연산자 | 설명 | 결과값 |
! | 부정 | boolean |
&& | AND | boolean |
|| | OR | boolean |
5. instanceof
- 객체가 특정 클래스에 속하는지 아닌지를 확인.
- 객체타입을 비교할때 사용.
- 상속 관계도 확인.
obj instanceof Class
//#obj가 Class에 속하거나 Class를 상속받는 클래스에 속하면 true 반환.
class Rabbit {}
let rabbit = new Rabbit();
alert( rabbit instanceof Rabbit ); // true
// 클래스가 아닌 생성자 함수에도 사용 가능
function Rabbit() {}
alert( new Rabbit() instanceof Rabbit ); // true
// 내장 클래스 활용
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
https://ko.javascript.info/instanceof
6. assignment(=) operator(대입 OR 할당 연산자)
연산자 | 설명 |
= | 왼쪽의 피연산자에 오른쪽의 피연산자를 대입 |
+= | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
-= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입. |
*= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
/= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
%= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 나눈 후, 그 값의 나머지를 왼쪽의 피연산자에 대입 |
&= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
|= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
^= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
<<= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
>>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
>>>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
tcpschool.com/java/java_operator_assignment
7. 화살표(->) 연산자
- 람다표현식 (매개변수목록) -> { 함수몸체 }
new Thread(new Runnable() {
public void run() {
System.out.println("전통적인 방식의 일회용 스레드 생성");
}
}).start();
new Thread(()->{
System.out.println("람다 표현식을 사용한 일회용 스레드 생성");
}).start();
* 유의사항
1. 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있다.
2. 매개변수가 하나인 경우에는 괄호(())를 생략할 수 있다.
3. 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호({})를 생략할 수 있다. (이때 세미콜론(;)은 붙이지 않음)
4. 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호({})를 생략할 수 없다.
5. return 문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결괏값이 된다. (이때 세미콜론(;)은 붙이지 않음)
www.tcpschool.com/java/java_lambda_concept
8. 3항 연산자
//(조건식)? 참 : 거짓;
int i = (1 < 2) ? 10 : 20;
//(조건식) ? 참 : (조건식) ? 참 : 거짓
int a = 1;
int b = 10;
System.out.println((a > b) ? "a는 b보다 크다" : (a < b) ? "b는 a보다 크다" : "a와 b는 같다.");
9. 연산자 우선 순위
우선순위 | 연산자 | 설명 |
1 | () {} | 괄호 / 대괄호 |
2 | ! ~ ++ -- | 부정 / 증감 연산자 |
3 | * / % | 곱 / 나누기 / 나머지 |
4 | + - | 덧셈 / 뺄셈 |
5 | << >> >>> | 비트단위의 쉬프트 연산자 |
6 | < <= > >= | 관계 연산자 |
7 | == != | |
8 | & | 비트단위의 논리연산자 |
9 | ^ | |
10 | | | |
11 | && | 논리곱 연산자 |
12 | || | 논리합 연산자 |
13 | ?: | 조건 연산자 |
14 | = += -= *= /= %= <<= >>= &= ^= ~= | 대입 / 할당 연산자 |
10. (optional) Java 13. switch 연산자
- 쉼표(,), 화살표(->), yield 키워드 사용 가능
// 쉽표와 화살표를 이용하여 여러 case 나열 가능
private static void switchJava12Basic(){
Day day = Day.WEDNESDAY;
System.out.println(
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("Invalid day: " + day);
}
);
}
// 쉽표와 화살표를 이용하여 여러 case 나열 가능
private static void switchJava12(){
int numLetters = 0;
Day day = Day.WEDNESDAY;
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> numLetters = 6;
case TUESDAY -> numLetters = 7;
case THURSDAY, SATURDAY -> numLetters = 8;
case WEDNESDAY -> numLetters = 9;
default -> throw new IllegalStateException("Invalid day: " + day);
};
System.out.println(numLetters)
}
// yield 키워드를 사용해 switch 결과 반환
private static void switchJava13Basic(){
Day day = Day.WEDNESDAY;
int numLetters = switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
yield 6;
case TUESDAY:
System.out.println(7);
yield 7;
case THURSDAY:
case SATURDAY:
System.out.println(8);
yield 8;
case WEDNESDAY:
System.out.println(9);
yield 9;
default:
throw new IllegalStateException("Invalid day: " + day);
};
System.out.println(numLetters);
}
// {} 블록을 사용해 추가 로직을 수행할 수 있다.
private static void switchJava13(){
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> {
System.out.println(6);
yield 6;
}
case TUESDAY -> {
System.out.println(7);
yield 7;
}
case THURSDAY, SATURDAY -> {
System.out.println(8);
yield 8;
}
case WEDNESDAY -> {
System.out.println(9);
yield 9;
}
default -> {
throw new IllegalStateException("Invalid day: " + day);
}
}
};
'STUDY REVIEW > STUDY HALLE' 카테고리의 다른 글
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.24 |
---|---|
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.11.24 |