목차 (클릭시 해당 목차로 이동)
연산자
연산자, 연산을 수행하는 기호
연산자
연산을 수행하는 기호
피연산자
연산자의 작업 대상
예시
x + 3 이라는 식이 있을 때, '+'는 두 피연산자를 더해서 그 결과를 반환하는 덧셈 연산자 이고, 변수 x와 리터럴 3은 피연산자 입니다.

산술 연산자
산술 연산자에는 사칙 연산자와 나머지 연산자가 있습니다.
사칙 연산자
- +
- -
- *
- /
나머지 연산자
- %
특징
1.
피연산자가 정수형인 경우, 나누는 수로 0을 사용할 수 없습니다. (오류 - "ArithmeticException" 발생)
하지만 0.0f, 0.0d로 나누는 경우 오류가 발생하지 않고 Infinity를 반환합니다.
System.out.println(3/0); // 실행시, 오류 (ArithmeticException) 발생
System.out.println(3/0.0); // Infinity 출력
2.
두개의 피연산자가 int형보다 작다면 연산자는 두 개의 피연산자들의 자료형을 int형으로 변환한 다음 연산을 수행합니다.
그래서 아래 예제 int형을 byte형인 c에 담으려고 하여 오류가 발생합니다.
byte a = 10;
byte b = 20;
byte c = a + b; // 컴파일 에러 발생
byte c = byte(a + b); // 정상 작동
System.out.println(c);
비트 연산자
비트 연산자는 피연산자를 비트단위로 논리 연산합니다.
| | | 피연산자 중 한쪽의 값이 1이면, 1을 결과로 얻습니다. 그 외에는 0을 얻습니다. |
| & | 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻습니다. 그 외에는 0을 얻습니다. |
| ^ | 피연산자의 값이 서로 다를 때만 1을 결과로 얻습니다. 그 외에는 0을 얻습니다. |
| x | y | x | y | x & y | x ^ y |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 |
| 연산자 | 설명 |
| ~ | 피연산자를 2진수로 표현했을때, 0은 1로, 1은 0으로 바꿉니다. |
| x | ~x | x << 1 | x >> 1 |
| 10010100 : 148 | 01101011 : 107 | 1 00101000 : 296 | 01001010 : 74 |
| x << n | 피연산자의 각 자리를 왼쪽으로 이동합니다. 빈자리는 0으로 채워집니다. x * 2^n 하는 것과 같습니다. |
| x >> n | 피연산자의 각 자리를 오른쪽으로 이동합니다. 빈자리는 0으로 채워집니다. x / 2^n 하는 것과 같습니다. |
| x | x << 1 | x << 4 | x >> 1 | x >> 4 |
| 10010100 : 148 |
1 00101000 : 296 | 1001 01000000 : 2368 | 01001010 : 74 | 1001 : 9 |
관계 연산자 (비교 연산자)
대소비교 연산자 <, >, <=, >=
| 비교연산자 | 연산결과 |
| > | 좌변 값이 크면 true / 아니면 false |
| < | 좌변 값이 작으면 true / 아니면 false |
| >= | 좌변 값이 크거나 같으면 true / 아니면 false |
| <= | 좌변 값이 작거나 같으면 true / 아니면 false |
등가비교 연산자 ==, !=
| 비교연산자 | 연산결과 |
| == | 두 값이 같으면 true / 아니면 false |
| != | 두 값이 다르면 true / 아니면 false |
논리 연산자
| || (OR결합) | 피연산자 중 어느 한 쪽이라도 true 이면 true / 아니면 false |
| && (AND 결합) | 피연산자 양쪽 모두 true 이어야 true / 아니면 false |
| x | y | x || y | x && y |
| true | true | true | true |
| true | false | true | false |
| false | true | true | false |
| false | false | false | false |
논리 부정 연산자 !
! 연산자는 피연산자가 true이면 false를, false 이면 true를 반환합니다.
| x | !x |
| true | false |
| false | true |
instanceof
instanceof 연산자는 객체 타입을 확인하는 연산자 입니다.
피연산자로 객체와 클래스를 사용하며 해당 객체의 타입이 해당 클래스가 맞는지 확인합니다.
(형 변환 가능 여부로 판단해 true / false로 결과를 반환합니다.)

주로 상속관계에서 부모객체인지 자식객체인지 확인하는데 사용합니다.
package javastudy.instanceofTest;
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);
System.out.println(child instanceof Parent);
System.out.println(parent instanceof Child);
System.out.println(child instanceof Child);
}
}

Child 가 Parent를 상속받는 관계에서 부모클래스는 자식클래스로 형변환 될 수 없기 때문에 false가 반환됩니다.
| parent intanceof Parent | true |
| child instanceof Parent | true |
| parent instanceof Child | false |
| child instanceof Child | true |
assignment(=) operator
= (assignment) 연산자는 다른 연산자와 묶어서 사용이 가능합니다.
| += | A += B | A와 B를 +(더한) 값을 A에 할당합니다. |
| -= | A -= B | A와 B를 -(뺀)한 값을 A에 할당합니다. |
| *= | A *= B | A와 B를 *(곱)한 값을 A에 할당합니다. |
| /= | A /= B | A와 B의 /(나눈 몫) 값을 A에 할당합니다. |
| %= | A %= B | A와 B의 %(나눈 나머지) 값을 A에 할당합니다. |
| &= | A &= B | A와 B를 &연산한 값을 A에 할당합니다. |
| ^= | A ^= B | A와 B를 XOR연산한 값을 A에 할당합니다. |
| |= | A |= B | A와 B를 OR연산한 값을 A에 할당합니다. |
| <<= | A <<= B | A와 B를 left shift한 값을 A에 할당합니다. |
| >>= | A >>=B | A와 B를 right shift한 값을 A에 할당합니다. |
주의
참조변수에서 = 연산자로 할당하면 주소값을 할당합니다.
obj1, obj2 변수 둘 다 주소값이 들어있고, obj1에 obj2를 = 연산하면 둘 다 obj2의 주소를 가리키게 됩니다.
package javastudy.operator;
class A{}
public class AssignOperator {
public static void main(String[] args) {
A obj1 = new A();
A obj2 = new A();
System.out.println("obj1 = " + obj1);
System.out.println("obj2 = " + obj2);
obj1 = obj2;
System.out.println("=====");
System.out.println("obj1 = " + obj1);
System.out.println("obj2 = " + obj2);
}
}

화살표 (->) 연산자
화살표 연산자는 java 8.0버전부터 적용된 람다(lambda) 표현식의 일부입니다.
기존 메서드 작성법
반환타입 메서드이름 (매개변수 선언) {
문장들
}
람다식 작성법
반환타입 메서드이름 (매개변수 선언) -> {
문장들
}
반환 타입과 메서드를 생략하고 매개변수와 실행되는 코드블럭을 화살표(->)로 연결해줍니다.
람다식에 대한 자세한 포스팅은 15주차에서 다루므로 여기서는 화살표 operator만 설명하고 넘어가겠습니다.
3항 연산자 ( ?: )
조건 연산자라고 불리는 ?: 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 3항연산자 입니다.

사용예시
package javastudy.operator;
public class ConditionOperator {
public static void main(String[] args) {
int x = 5;
int y = 3;
boolean result;
result = x > y ? true : false;
System.out.println("result = " + result);
}
}

x > y 조건이 참이므로 result에는 true가 담기게 됩니다.
연산자 우선 순위
지금까지 다룬 연산자가 많은데, 이 연산자들이 한번에 나온다면 우선순위가 어떻게 결정되는지 알아봅니다.
아래 규칙만 잘 기억하고 있어도 대부분의 연산자 우선순위를 파악할 수 있습니다.
- 산술 > 비교 > 논리 > 대입
- 단항(1) > 이항(2) > 삼항(3)
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽
| 종류 | 결합규칙 | 연산자 | 우선순위 |
| 단항 연산자 | <- | ++, --, +, -, ~, !, (type) | 높음 낮음 |
| 산술 연산자 | -> | *, /, % | |
| -> | +, - | ||
| -> | <<, >> | ||
| 비교 연산자 | -> | <, >, <=, >= | |
| -> | ==, != | ||
| 논리 연산자 | -> | & | |
| -> | ^ | ||
| -> | | | ||
| -> | && | ||
| -> | || | ||
| 삼항 연산자 | -> | ?: | |
| 대입 연산자 | <- | =, +=, -=, *=, /=, %= <<=, >>=, &=, ^=, |= |
예시 식
| 식 | 설명 |
| x << 2 + 1 | 비트연산자(<<)는 산술연산자(+)보다 우선순위가 낮습니다. x << (2+1) |
| data & 0xFF == 0 | 논리연산자(&)는 비교연산자(==)보다 우선순위가 낮습니다. data & (0xFF == 0) |
| x < -1 || x > 3 && x < 5 | 비교연산자가 논리연산자보다 우선순위가 높습니다. 또한, && 연산자가 || 연산자보다 우선순위가 높습니다. x < -1 || (x > 3 && x < 5) |
'Web > Java' 카테고리의 다른 글
| [Java] GitHub API를 이용한 대시보드 만들기 (2) | 2021.07.05 |
|---|---|
| [Java] JUnit5 (0) | 2021.07.05 |
| [Java] 제어문 (0) | 2021.07.05 |
| [Java] 자바 데이터타입, 변수 그리고 배열 (2) | 2021.06.10 |
| [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (2) | 2021.06.04 |