티스토리 뷰

Java

3. 연산자

kingsubin 2020. 11. 28. 11:06

목표

자바가 제공하는 다양한 연산자를 학습하세요.

학습할 것

  • 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • 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. 연산자 우선 순위

  • 같은 우선순위르 가진 연산자는 연산 방향이 왼쪽에서 오른쪽으로 수행된다.
  • 단향 연산자, 부호 연산자, 대입 연산자는 오른쪽에서 왼쪽으로 수행된다.

https://velog.io/@ggob_2/Java-study-3

 


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

velog.io/@ggob_2/Java-study-3

 

※ 스터디

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