ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 연산자
    Java 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
킹수빈닷컴