본문 바로가기
Backend Study/나Java봐라~

연산자

by DaSsom 2023. 8. 6.
  • 산술 / 비트 / 관계 / 논리 연산자
더보기
산술 연산자 : +, -, *, /, %

비트 연산자
비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자.
& 대응되는 비트가 모두 1이면 1을 반환. (비트 AND 연산)
| 대응되는 비트 중에서 하나라도 1이면 1을 반환. (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1을 반환. (비트 XOR 연산)
~ 비트를 1이면 0, 0이면 1로 반전. (비트 NOT 연산, 1의 보수)
<< 명시된 수만큼 비트들을 모두 왼쪽으로 이동. (Left shift 연산)
>> 부호를 유지하고 지정된 수만큼 모두 오른쪽으로 이동. (Right shift 연산)
>>> 명시된 수만큼 비트들을 모두 오른쪽으로 이동, 새로운 비트는 0으로 채움. (Unsigned right shift 연산)

관계 연산자 : ==, !=, >, >=, <, <=

논리 연산자 : &&, ||, !

  • instanceof
더보기
참조 변수가 참조하고 있는 인스턴스의 실제 타입을 반환함
해당 객체가 어떤 클래스나 인터페이스로부터 생성되었는지 알 수 있음

class Parent{}
class Child extends Parent{}

public class InstanceofTest {
    public static void main(String[] args){

        Parent parent = new Parent();
        Child child = new Child();

        System.out.println( parent instanceof Parent );  // true
        System.out.println( child instanceof Parent );   // true
        System.out.println( parent instanceof Child );   // false
        System.out.println( child instanceof Child );   // true
    }
}


But, instanceof를 사용할 경우, 객체지향의 원칙 중 OCP(개방-폐쇄 원칙)을 위반하게 됨 → 지양하는 것이 좋

  • assignment(=) operator
더보기
오른쪽 값을 왼쪽 피연산자에 할당하기 위해 사용하거나 객체 참조를 할당하기 위해 사용

 


  • 화살표(->) 연산자
더보기
(자바8 이상) 람다식에서 익명함수 만들때 사용하며 코드가 간결해짐
// (인자, ... ) -> {method 바디}로 표기함


public interface Compare {
    public int compareTo(int a, int b);
}

public static void exec(Compare compare) {
    int k = 10;
    int m = 20;
    int value = compare.compareTo(k, m);
    System.out.println(value);
}

public static void main(String[] args) {
    exec((i, j)->{ // compareTo(int a, int b) 부분, Compare 인터페이스를 구현
        return i+j;
    });
}​

  • 3항 연산자
더보기
if-else 구문을 간결하게 만든 표현식이며 3개의 연산자가 물음표와 콜론으로 나뉘어져 있다

"조건 ? true 반환값 : false 반환값" 으로 표기함

  • 연산자 우선 순위

  • Java 13. switch 연산자
더보기
자바 13부터 switch 연산자 사용시 표기법이 간결해짐

int input = 0;

swich(input) {
	case 1:
    	System.out.println(1);
    	break;
    case 2:
    	System.out.println(2);
    	break;
    default:
    	System.out.println(3);
    	break:
}

// 자바13 이후 표기 ↓
swich(input) {
	case 1 -> System.out.println(1);
    case 2 -> System.out.println(2);
    default -> System.out.println(3);
}​


++ break 대신 yield 사용가능

 


Tecoble

 

instanceof의 사용을 지양하자

instanceof란? 우리는 종종 그림과 같이 부모를 상속해서 만들어진 자식 객체가 여러 타입인 경우에 특정 클래스가 맞는지 확인하기 위해 아래 코드와 같이 라는 메서드를 사용하곤 한다. 코드는 pi

tecoble.techcourse.co.kr