3 minute read

3주차과제 : 연산자

목표

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


학습할 것

  • 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • instanceof
  • assignment(=) operator
  • 화살표(->) 연산자
  • 3항 연산자
  • 연산자 우선 순위
  • (optional) Java 13. switch 연산자

연산자 (operator)

  • 연산에 사용되는 표시나 기호
  • 연산자와 함께 연산되는 데이터 → 피연산자 (operand)
  • 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것 → 연산식(expression)

산술 연산자

  • Binary Operator
    • +, -, *, /, %(Modulo)
    • 사칙연산 및 나머지 계산
    • ArithmeticException 발생 가능
      • Divide by zero
      • Modulo by zero

비트 연산자

컴퓨터가 기존 자료형(int,char etc)을 비트로 변환하는 작업을 사용자가 미리 해주기 때문에 속도가 빠르다.

비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자

  • &: 대응되는 비트가 모두 1이면 1을 반환한다(비트 AND 연산)
  • l: 대응되는 비트 중에서 하나라도 1이면 1을 반환한다(비트 OR 연산)
  • ^: 대응되는 비트가 서로 다르면 1을 반환한다.(비트 XOR 연산)
  • ~: 비트를 1이면0으로,0이면 1로 반전시킨다.(비트 NOT 연산)
  • ”«“:지정한 수만큼 비트들을 전부 왼쪽으로 이동시킨다.(left shift 연산)
  • ”»“:부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킨다.(right shift 연산)
  • &=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND연산한후 , 그결과값을 왼쪽의 피연산자에 대입한다.
  • l=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR연산한후 , 그결과값을 왼쪽의 피연산자에 대입한다.
  • ^=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR연산한후 , 그결과값을 왼쪽의 피연산자에 대입한다.
  • «=:왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
  • ”»=”:왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
  • ”»>=”:왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한후, 그 결과값을 왼쪽의 피연산자에 대입한다.

관계 연산자

비교 연산자라고도 한다.

  • ”>”:왼쪽항이 크면 참, 아니면 거짓을 반환한다.
  • ”<”:왼쪽항이 작으면 참, 아니면 거짓을 반환한다.
  • ”>=”:왼쪽항이 오른쪽항 보다 크거나 같으면 참, 아니면 거짓을 반환한다.
  • ”<=”:왼쪽항이 오른쪽항 보다 작거나 같으면 참, 아니면 거짓을 반환한다.
  • ”==”:두개 항의 값이 같으면 참, 아니면 거짓을 반환한다.
  • ”!=”:두개 항이 다르면 참, 아니면 거짓을 반환한다.

논리 연산자

논리 연산자는 주어진 논리식을 판단하여 true, false를 결정하는 연산자이다.

  • &&:논리식이 모두 참이면 1을 반환한다.(LOGICAL AND)
  • **   ** :논리식 중 에 하나 라도 참이면 1을 반환한다.(LOGICAL OR)
  • !:논리식의 결과가 참이면 0을,거짓이면 1을 반환한다.(LOGICAL NOT)

instanceof

객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자

  • Syntax
    • object instanceOf type
public class ArrayList<E> implements List [
}
public List {
}

ArrayList list = new ArrayList();
System.out.println(list instanceof ArrayList);
System.out.println(list instanceof List);
System.out.println(list instanceof Set);
System.out.println(list instanceof Object);

//output : true
//output : true
//output : false
//output : true (만약 list(Object) 가 null이라면 false 반환)

assignment(=) operator

대입연산자라고도 하며 대입연산자는 변수에 값을 대입할 때 사용하는 이항연산자이다. 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.

  • =:왼쪽의 피연산자에 오른쪽 피연산자를 대입한다.
  • +=:왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후 , 그 결과값을 왼쪽의 피연산자에 대입한다.
  • -=:왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀후, 그 결과값을 왼쪽의 피연산자에 대입한다.
  • *=:왼쪽의 피연산자에서 오른쪽의 피연산자를 곱한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
  • /=:왼쪽의 피연산자에서 오른쪽의 피연산자를 나눈후, 그 결과값을 왼쪽의 피연산자에 대입한다.
  • %=:왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀후, 그 나머지값을 왼쪽의 피연산자에 대입한다.

화살표(->) 연산자

  • 8 버전부터 람다 표현식(lambda expression) 이 공식적으로 적용
  • 람다식이란?

메서드를 하나의 식 으로 표현 한것

또한 람다식은 함수를 간략하게 하면서도 명확한 식으로 표현할수 있게 해준다.

메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어져 람다식을 ‘익명함수’라고도 한다.

(argument, ...) -> {expression}

int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int) (Math.random() * 100) + 1);
System.out.println(Arrays.toString(arr));

삼항 연산자

피연산자를 세 개 가지는 조건 연산자

  • 조건식 ? 반환값 1 : 반환값 2
int score = 95;
char grade = (score > 90) ? 'A' : 'B';

if(score > 90) {
	grade = 'A';
} else {
	grade = 'B';
}
// 두 조건식의 의미는 같다.

연산식의 우선 순위

Operators Precedence  
postfix expr++ expr–  
unary ++expr –expr +expr -expr ~ !  
multiplicative * / %  
additive + -  
shift « » »>  
relational < > <= >= instanceof  
equality == !=  
bitwise AND &  
bitwise exclusive OR ^  
bitwise inclusive OR l  
logical AND &&  
logical OR ll  
ternary ? :  
assignment = += -= *= /= %= &= ^= = «= »= »>=
  • 동일 선상에 있는 연산자들은 동일한 우선 순위를 가짐
  • 대입 연산 제외한 Binary Operator 는 left → right 로 평가
  • 대입 연산은 right → left 로 평가

Reference

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

Leave a comment