✏️ Info.
- Java 연산자 공부
📋 List.
1. 산술 연산자
2. 비트 연산자
3. 관계 연산자
4. 논리 연산자
5. instanceof
6. assignment(=) operator
7. 화살표(->) 연산자
8. 3항 연산자
9. 연산자 우선 순위
10. (optional) Java 13. switch 연산자
✔️ Content.
1. 산술 연산자
연산자 | 기호 |
더하기 | + |
빼기 | - |
곱하기 | * |
나누기 | / |
나머지 | % |
입력
public class TestClass {
public static void main(String args[]) {
int a = 10;
int b = 5;
System.out.println("a + b = " + (a + b)); // 더하기
System.out.println("a - b = " + (a - b)); // 빼기
System.out.println("a * b = " + (a * b)); // 곱하기
System.out.println("a / b = " + (a / b)); // 나누기
System.out.println("a % b = " + (a % b)); // 나머지
}
}
출력
a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0
주의사항
- 나누기의 경우 분모가 0이 될 수 없으므로 0으로 나눌 경우 다음과 같은 에러 메시지를 띄운다.
Exception in thread "main" java.lang.ArithmeticException: / by zero
2. 비트 연산자
- 비트 연산자는 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자이다.
종류 | 연산자 | 예 | 설명 |
AND | & | 0 & 0 -> 0 0 & 1 -> 0 1 & 0 -> 0 1 & 1 -> 1 |
비트가 모두 1이면 1을 반환 |
OR | | | 0 | 0 -> 0 0 | 1 -> 1 1 | 0 -> 1 1 | 1 -> 1 |
비트중 하나라도 1이면 1 반환 |
XOR | ^ | 0 ^ 0 -> 0 0 ^ 1 -> 1 1 ^ 0 -> 1 |
비트가 서로 다르면 1 반환 |
NOT | ~ | 0 -> 1 1 -> 0 |
비트 반전 |
Left Shift | << | 아래 참조 | 지정한 수만큼 비트를 전부 왼쪽으로 이동 (빈 자리는 0으로 채워진다) |
Right Shift | >> | 지정한 수만큼 비트를 전부 오른쪽으로 이동 (빈 자리는 최상위 비트로 채워 진다) |
|
>>> | Java 에만 존재하는 연산자로 지정한 수 만큼 비트를 전부 오른쪽으로 이동 (빈 자리는 0으로 채워진다.) |
- Shift 예)
//양수
a = 8 (0000 0000 0000 0000 0000 0000 0000 1000 )
8 << 5 = 256 (0000 0000 0000 0000 0000 0001 0000 0000 )
8 >> 5 = 0 (0000 0000 0000 0000 0000 0000 0000 0000 )
8 >>> 5 = 0 (0000 0000 0000 0000 0000 0000 0000 0000 )
//음수
a = -8 (1111 1111 1111 1111 1111 1111 1111 1000 )
-8 << 5 = -256 (1111 1111 1111 1111 1111 1111 0000 0000 )
-8 >> 5 = -1 (1111 1111 1111 1111 1111 1111 1111 1111 )
-8 >>> 5 = 134217727 (0000 0111 1111 1111 1111 1111 1111 1111 )
3. 관계 연산자
연산자 | 예 | 설명 |
> | a > b | a가 b보다 클 경우 true |
>= | a >= b | a가 b보다 크거나 같을 경우 true |
< | a < b | a가 b보다 작을 경우 true |
<= | a <= b | a가 b보다 작거나 같을 경우 true |
== | a == b | a가 b와 같을 경우 true |
!= | a != b | a가 b와 다를 경우 true |
4. 논리 연산자
종류 | 연산자 | 예 | 설명 |
논리 곱 | && | a && b | a 그리고 b가 참일 경우 true |
논리 합 | || | a || b | a 또는 b가 참일 경우 true |
부정 | ! | !a | a 가 true일 경우 false, false일 경우 true로 반전 |
5. instanceof
- 변수가 형변환이 가능한지를 체크하는 연산자 이다.
- 사용법 - {객체} instanceof {클래스}
- 결과 - true, false
public class TestClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
B b = new B();
System.out.println(a instanceof A); // true
System.out.println(a instanceof B); // false
System.out.println(b instanceof A); // true
System.out.println(b instanceof B); // true
}
}
class A{
}
class B extends A{
}
6. assignment(=) operator
- 대입 연산으로 앞서 배운 연산자를 활용하는 예이다
종류 | 연산자 | 예 | 설명 |
대입 | = | a = b | a 에 b를 대입 |
산술 | += | a += b | a = a + b a 에 a + b 값을 대입 |
-= | a -= b | a = a - b a에 a - b값을 대입 |
|
*= | a *= b | a = a * b a 에 a * b 값을 대입 |
|
/= | a /= b | a = a / b a 에 a / b 값을 대입 |
|
%= | a %= b | a = a % b a 에 a % b 값을 대입 |
|
비트 | &= | a &= b | a = a & b a 에 a AND b 값을 대입 |
|= | a |= b | a = a | b a 에 a OR b 값을 대입 |
|
^= | a ^= b | a = a ^ b a 에 a XOR b 값을 대입 |
|
<<= | a <<= b | a = a << b a 에 a left shift b 값을 대입 |
|
>>= | a >>= b | a = a >> b a 에 a right shift b 값을 대입 (빈 값은 최상위 비트에 맞게) |
|
>>>= | a >>>= b | a = a >>>b a 에 a right shift b 값을 대입 (빈 값은 0으로) |
사용 예)
a = 10, b = 5
10 = 5 => a = 5
10 += 5 => a = 15
10 -= 5 => a = 5
10 *= 5 => a = 50
10 /= 5 => a = 2
1010 ^= 101 => a = 1111
1010 &= 101 => a = 0
1010 |= 101 => a = 1111
1010 <<= 5 => a = 101000000
1010 >>= 5 => a = 0
1010 >>>= 5 => a = 0
7. 화살표(->) 연산자
- Java8 버전 부터 지원하게 된 람다식(Lamdaba Expressions)에 사용되는 표현이다.
1). 람다식
- 익명함수를 생성하기 위한 식으로 함수 지향 언어에 가깝다
- 형태는 매개변수를 가진 코드 블록이지만, 런타임 시에는 익명 구형 객체(추상메소드를 한개 포함한)를 생성한다.
- 로컬 익명 구현객체를 생성하지만, 사용 목적은 인터페이스가 가지고 있는 메소드를 간편하게 즉흥으로 구현해서 사용하는 것이 목적이다.
- 반드시 한개의 추상메소드만을 가지는 인터페이스여야 한다. 이러한 인터페이스를 함수적 인터페이스(@FunctionalInterface)라고 부르며 해당 어노테이션을 명시 할 수 있다.
2). 표현식
(타입 매개변수, ...) -> {실행문;...};
- 매개변수의 자료형은 생략 가능하다.
- 매개변수가 한개일 경우 매개변수를 감싸는 소괄호를 생략 가능하다.
- 실행문이 한개일 경우 실행문들을 감싸는 중괄호를 생략 가능하다.
- 실행문이 한개이며 실행문이 return 문일 경우 실행문을 감싸는 중괄호와 return을 생략 가능하다.
- 사용 예)
public class TestClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
calculator cal = (int a, int b) -> { return a + b;};
calculator cal2 = (a, b) -> {return a+b;};
calculator cal3 = (a, b) -> a+b;
System.out.println(cal.plus(5, 10));
System.out.println(cal2.plus(5, 10));
System.out.println(cal3.plus(5, 10));
}
}
@FunctionalInterface
interface calculator{
int plus(int a, int b);
}
3). 오류 사항
- @FunctionalInterface 명시 후 두개의 추상메소드를 선언했을경우 발생 오류
8. 3항 연산자
- if/else 의 문을 보다 간결하게 나타낼 수 있는 문법
- 사용법
- Condition ? A : B (조건문 ? true 일 때 반환 값 : false 일 때 반환값)
예)
int a = 10;
int b = 5;
int result;
// if/else
if(a > b){
result = a;
}else{
result = b;
}
// 3항 연산
result = a > b ? a : b;
9. 연산자 우선 순위
우선순위 | 연산자 | 설명 | 연산 방향 |
0 | (), [] | 괄호 | -> |
1 | expr++, expr-- | 증감 (후위 증가 및 감소) | -> |
2 | ++expr, --expr, +expr, -expr, ~, ! | 증감 (전위 증가 및 감소), 산술(단항) | <- |
3 | *, /, % | 산술 (곱하기, 나누기, 나머지) | -> |
4 | +, - | 산술 (더하기, 빼기) | -> |
5 | <<, >>, >>> | 비트 (Shift) | -> |
6 | <, >, <=, >=, instanceof | 관계 (크기, 형변환) | -> |
7 | ==, != | 관계 (같은지, 아닌지) | -> |
8 | & | 비트 (AND) | -> |
9 | ^ | 비트 (XOR) | -> |
10 | | | 비트 (OR) | -> |
11 | && | 논리 (AND) | -> |
12 | || | 논리 (OR) | -> |
13 | ? : | 삼항 연산자 | <- |
14 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= | 대입 연산자 | <- |
- 연산 순위가 같은 식의 경우 연산 방향에 의해 식이 진행된다.
int a = 10;
int b = 5;
int c = 3;
int result;
/**
* 연산 순위가 같은 식의 경우 연산 방향에 의해 결정된다
* 1. a + b
* 2. 1. + c
* 3. result = 2.
*/
result = a + b + c;
10. (optional) Java 13. switch 연산자
- Java 12 에서의 value , break 가 사라지며 yield 문법이 생겨났다
// Java 12
private static int getValueViaBreak(String mode) {
int result = switch (mode) {
case "a":
case "b":
break 1;
case "c":
break 2;
case "d":
case "e":
case "f":
break 3;
default:
break -1;
};
return result;
}
// Java 13
private static int getValueViaYield(String mode) {
int result = switch (mode) {
case "a", "b":
yield 1;
case "c":
yield 2;
case "d", "e", "f":
yield 3;
default:
yield -1;
};
return result;
}
❗️ Refer.
비트 연산자
- www.tcpschool.com/c/c_operator_bitwiseinstanceof
- improver.tistory.com/140assignment(=) operator
- tcpschool.com/java/java_operator_assignment화살표(->) 연산자
- juyoung-1008.tistory.com/48연산자 우선 순위
- www.programiz.com/java-programming/operator-precedence
(optional) Java 13. switch 연산자
- mkyong.com/java/java-13-switch-expressions/
'Live-Study' 카테고리의 다른 글
[6주차] 상속 (0) | 2021.02.19 |
---|---|
[5주차] 클래스 (0) | 2021.01.04 |
[4주차] 제어문 (0) | 2020.12.31 |
[2주차] 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.20 |
[1주차] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2020.11.20 |