3주차 과제: 연산자

2020. 12. 27. 11:272021/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