2020. 12. 27. 11:27ㆍ2021/JOB DA STUDY
목표
자바가 제공하는 다양한 연산자의 학습
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- 할당 연산자 (assignment operator)
- 화살표 연산자
- 3항 연산자
- 연산자 우선순위
- (JAVA 13) switch 연산자
1. 산술 연산자
[*(곱), /(몫), %(나머지)] > [+(덧셈), -(빼기)]
2. 비트 연산자
연산자 | 기능 |
X << Y | 정수 x의 각 비트를 y만큼 왼쪽으로 이동 빈자리는 0으로 채워진다. |
X >> Y | 정수 x의 각 비트를 y만큼 오른쪽으로 이동 빈자리는 정수의 최상위 부호비트와 같은 값으로 채워진다. |
X >>> Y | 정수 x의 각 비트는 y만큼 오른쪽으로 이동 빈자리는 무조건 0으로 채원진다. |
3. 관계 연산자
[<, >, <=, >=] > [==, !=]
4. 논리 연산자
[&&] > [ || ]
AND 연산자 | || | 피연산자 양 쪽 모두 true이면 true |
OR 연산자 | && | 피연산자 중에서 어느 한쪽에 true이면 true |
* 같은 조건식이라도 &&의 경우 연산결과가 false일 확률이 높은 피연산자를 연산자의 좌측에 놓아야 더 빠른 연산결과 얻을 수 있음
5. Instanceof
참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 연산자 사용
참조변수 instanceof 타입(클래스명)
- 결과 = true: 참조변수가 검사한 타입으로 형변환이 가능
- 결과 = false: 참조변수가 검사한 타입으로 형변환이 불가능
6. Assignment Operator
대입 연산자 | 설명 |
= | 왼쪽의 피연산자에 오른쪽 피연산자 대입 |
+= | (A+=1) == (A=A+1) |
-= | (A-=1) == (A=A-1) |
*= | (A*=1) == (A=A*1) |
/= | (A/=1) == (A=A/1) |
%= | (A%=1) == (A=A%1) |
&= | (A &= B) == (A=A and B) |
|= | (A |= B) == (A=A or B) |
^= | (A ^= B) == (A=A xor B) |
<<= | 왼쪽의 피연산자를 오른쪽의 피연산자 만큼 왼쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
>>= | 왼쪽의 피연산자를 오른쪽의 피연산자 만큼 부호를 유지하며 오른쪽 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입 |
>>>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후, 그 결과값을 피연산자에 대입 |
7. 화살표 연산자 = Lambda Expression
람다 표현식이란 메소드를 하나의 식으로 표현한 것으로 클래스를 작성하고 객체를 생성하지 않아도 메소드 사용이 가능하다.
- 람다식 EX -
(x, y) -> x<y ? x:y;
자바에서는 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성할 수 있는 클래스를 익명클래스라고 한다. 이런 의미에서 람다표현식은 익명 클래스와 같다.
- 익명 클래스 EX -
new Object(){
int min(int x, int y){
return x<y ? x:y;
}
}
*** 람다 표현식 작성 유의 사항 ***
(매개변수 목록) -> {함수 몸체}
- 매개변수 타입을 추론할 수 있는 경우, 타입 생략 가능
- 매개변수가 하나인 경우 괄호 생략
- 함수의 몸체가 하나의 명령문으로만 이루어진 경우 중괄호 생략가능 (세미콜론 붙지 않음)
- 함수의 몸체가 하나의 return으로 이루어진 경우 {} 생략 불가능
- return문 대신 표현식을 사용할 수 있으며, 이때의 반환값은 표현식의 결곽값이 된다 (세미콜론은 붙지 않음)
함수형 인터페이스(functional interface)
람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야하는데, 람다 표현식을 하나의 변수에 대입을 할 때 사용하는 참조 변수의 타입을 "함수형 인터페이스"라고 부른다.
참조변수의 타입 참조변수의 이름=람다 표현식
@FunctionalInterface
interface Calc{
public int min(int x, int y);
}
public class Lambda02{
public static void main(String[] args){
Calc minNum = (x, y) -> x < y ? x:y;
System.out.println(minNum.min(3, 4));
}
}
* @FunctionalInterface
을 사용해 함수형 인터페이스 임을 명시
@FunctionalInterface
* 함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야 한다.
Calc minNum = (x, y) -> x < y ? x:y;
* 함수형 인터페이스의 사용
System.out.println(minNum.min(3, 4));
8. 3항 연산자
참과 거짓을 판단할 변수나 조건식 지정 ? 값1 : 값2
변수가 참이면 값1, 거짓이면 값2
9. 연산자 우선순위
우선순위 | 연산자 | 피연산자 | 연산방향 |
0순위 | 괄호 속의 연산 ( 연산자 ) | 괄호 속의 연산자가 다양 | 괄호 속의 연산자에 따라 다름 |
1순위 | 증감(++, --) 부호(+, -) 비트(~), 논리(!) |
단항 | <----- |
2순위 | 산술(*, /, %) | 단항 | -----> |
3순위 | 산술(+, -) | 이항 | -----> |
4순위 | 비트(>>, <<, >>>) | 이항 | -----> |
5순위 | 비교(>, <, =>, <=, instanceof) | 이항 | -----> |
6순위 | 비교(==, !=) | 이항 | -----> |
7순위 | 논리곱 (AND) & | 이항/단항 | -----> |
8순위 | 논리곱 (XOR) ^ | 이항/단항 | -----> |
9순위 | 논리곱 (OR) | | 이항/단항 | -----> |
10순위 | 논리연산 && | 이항 | -----> |
11순위 | 논리연산 || | 이항 | -----> |
12순위 | 조건(?, :) | 이항 | -----> |
13순위 | 대입(=, +=, -=, *=, /=, %=, &=, ^=, |=. <<=, >>=, >>>=) | 이항 | <----- |
10. Java 13. switch 연산자
조건이 여러개이고, 조건에 대한 결과값이 여러개인 경우에 Switch 연산자 사용
switch(operator){
case 조건1: {
조건1이 참인 경우 결과
break;
}
case 조건2: {
조건2가 참인 경우 결과
break;
}
default: {
System.out.print("조건을 만족하지 못하는 경우");
}
}
'2021 > JOB DA STUDY' 카테고리의 다른 글
NoClassDefFoundError 와 ClassNotFoundException (0) | 2020.12.29 |
---|---|
InputStream and OutputStream (0) | 2020.12.28 |
MD5 암호화 (0) | 2020.12.23 |
Public과 Private (0) | 2020.12.22 |
Instanceof (0) | 2020.12.21 |