티스토리 뷰
프로그램에서 데이터를 처리하여 결과를 산출하는 것을 연산(operations)이라고 한다.
연산에 사용되는 기호를 연산자(operator)라고 하고, 연산되는 데이터는 피연산자 (operand)라고 한다.
연산자와 피연산자를 이용하여 연산의 과정을 기술한 것을 연산식(expression)이라고 한다.
산술 연산자
자바의 산술연산자는 +(더하기), -(빼기), *(곱하기), %(나누기) 그리고 나머지 연산이 있다.
public static void main(String[] args) {
int a = 6;
int b = 3;
System.out.println(a+b); //9
System.out.println(a-b); //3
System.out.println(a*b); //18
System.out.println(a%b); //0
System.out.println(a/b); //2
}
나눗셈 연산은 정수형 기본인 int 형으로 나눗셈을 하게 되면 5/2 했을 때 소수점을 버린 2의 값이 나오지만
double 형으로 나눗셈을 했을 때는 5/2를 하면 2.5의 값이 나오게 된다.
int a = 5;
int b = 2;
System.out.println(a/b); //2
double aa = 5;
double bb = 2;
System.out.println(aa/bb); //2.5
더하기와 빼기는 산술연산자이기도하고, 부호연산자 이기도 하다.
int a = +10;
int b = -10;
부호 연산자의 산출 타입은 int 타입이 된다. 즉 아래와 같이 했을 경우 컴파일 에러가 난다. (IDE에서 잡아줌)
byte aa = 6;
int result = -aa;
비트 연산자
비트연산자는 ~, &, |, ^ 4개로 구성된다.
& 연산은 그림과 같다. Bit 연산 시 둘 다 1이면 1 하나라도 0이면 0이다.
/**
* &(AND) 연산
*/
int bit = 6;
int bit2 = 10;
System.out.println(Integer.toBinaryString(bit)); //0110
System.out.println(Integer.toBinaryString(bit2)); //1010
System.out.println(Integer.toBinaryString(bit & bit2)); //0010
| (OR) 연산은 아래 그림과 같다. Bit 연산 시 하나라도 1이면 1이다.
/**
* |(OR) 연산
*/
int bit = 6;
int bit2 = 10;
System.out.println(Integer.toBinaryString(bit)); //0110
System.out.println(Integer.toBinaryString(bit2)); //1010
System.out.println(Integer.toBinaryString(bit | bit2)); //1110
^연산은 XOR(exclusive or : 배타적 논리합) 연산이다. 서로 다를 때 1을 나타낸다.
/**
* ^(XOR) 연산
*/
int bit = 6;
int bit2 = 10;
System.out.println(Integer.toBinaryString(bit)); //0110
System.out.println(Integer.toBinaryString(bit2)); //1010
System.out.println(Integer.toBinaryString(bit ^ bit2)); //1100
~는 비트 반전 연산자로서 비트가 0이면 1로 바꾸고 1이면 0으로 반전시킨다.
/**
* 모든 비트를 반전 (0->1 , 1->0) 한 후에
* 2의 보수를 취한 값에 -부호를 붙여서 반환한다.
*/
int bit = 5;
System.out.println(Integer.toBinaryString(bit)); //101
System.out.println(Integer.toBinaryString(~bit)); //11111111111111111111111111111010
System.out.println(~bit); //-6
관계 연산자
관계 연산자는 대소 또는 동등을 비교해서 boolean 타입을 산출한다.
/**
* 관계연산자
*/
int a = 10;
int b = 20;
System.out.println(a == b); //false
System.out.println(a != b); //true
System.out.println(a > b); //false
System.out.println(a >= b); //false
System.out.println(a < b); //true
System.out.println(a <= b); //true
char charA = 'A';
char charB = 'B';
System.out.println(charA ==charB); //false
System.out.println(charA !=charB); //true
System.out.println(charA > charB); //false
System.out.println(charA >=charB); //false
System.out.println(charA < charB); //true
System.out.println(charA <=charB); //true
논리 연산자
논리 연산자는 논리곱(&&), 논리합(||), 배타적 논리합(^), 그리고 논리 부정(!)을 사용한다.
비트 연산과 비슷하지만 논리 연산자의 피연산자는 모두 boolean 타입만 사용할 수 있다.
또한 &&와 &의 차이는 &&연산의 경우 앞의 값이 false이면 뒤의 값을 평가하지 않고 false를 반환한다.
||와 |의 차이도 같다.
이렇다 보니 같은 조건식이라도 피연산자의 위치에 따라서 연산속도가 달라질 수 있다.
OR 연산의 경우 연산의 결과가 true일 확률이 높은 피연산자를 왼쪽에 놓는 게 더 빠른 연산 결과를 얻을 수 있다.
boolean a = true;
boolean b = false;
System.out.println(a && b); //false
System.out.println(a & b); //false
System.out.println(a || b); //true
System.out.println(a | b); //true
System.out.println(!a); //false
System.out.println(!b); //true
instanceof
instanceof는 객체의 타입을 확인할 때 사용한다.
어떤 객체가 어떤 클래스의 인스턴스인지 확인하려면 instanceof 연산자를 사용할 수 있다.
boolean result = 좌항(객체) instanceof 우항(타입)
좌항의 객체가 우항의 타입으로 생성되었다면 true 를 반환하고 아니면 false를 반환한다.
assignment(=) operator
처음 프로그래밍을 배울 때 헷갈릴수도 있는 부분 중 하나가 이 대입연산자 이다.
학교에서 배우는 수학에서는 =의 기호가 같다는 기호로 쓰이지만 프로그래밍에서는 Lvalue = Rvalue이다.
대입연산자의 왼쪽 피연산자를 Lvalue(left value) 라고 하고 오른쪽 피연산자를 Rvalue(right value)라고 한다.
=연산자는 오른쪽 피연산자의 값을 왼쪽의 피연산자에 대입하는 연산자이다.
화살표(->) 연산자
화살표 연산자는 자바8에서 추가된 람다 표현식(lambda expression)에서 쓰이는 연산자이다.
3항 연산자
삼항연산자는 세 개의 피연산자를 필요로 하는 연산자이다.
조건식의 결과에 따라서 선택적으로 값을 반환한다.
연산자 우선 순위
프로그램에서 연산자의 연산 방향과 연산자 간의 우선순위가 정해져 있다.
아래 그림처럼 우선순위가 같은 연산자들은 연산 방향에 따라서 연산을 한다.
Java13 switch 연산자
Java 13 switch를 검색해서 알아보았는데 그동안 switch문은 if문을 좀 더 깔끔하게 보기위해서 사용하는 줄로만 알았는데 어떠한 변수 값에 값을 할당할 수 있는지도 처음 알았다.
public class JEP354 {
public static void main(String[] args) {
System.out.println(getValueViaYield("a"));
System.out.println(getValueViaYield("c"));
System.out.println(getValueViaYield("e"));
System.out.println(getValueViaYield("z"));
}
// Traditional switch
private static int getValueBefore12(String mode) {
int result;
switch (mode) {
case "a":
case "b":
result = 1;
break;
case "c":
result = 2;
break;
case "d":
case "e":
case "f":
result = 3;
break;
default:
result = -1;
}
;
return result;
}
// Java 12, multiple comma-separated labels
private static int getValueMultipleLabels(String mode) {
int result;
switch (mode) {
case "a", "b":
result = 1;
break;
case "c":
result = 2;
break;
case "d", "e", "f":
result = 3;
break;
default:
result = -1;
}
;
return result;
}
// Java 13, value breaks are superseded by 'yield' statements
// Java 12, switch expression returning value via break
/*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 12, switch expression returns a value via label rules (arrow)
private static int getValueViaArrow(String mode) {
int result = switch (mode) {
case "a", "b" -> 1;
case "c" -> 2;
case "d", "e", "f" -> {
// do something here...
System.out.println("Supports multi line block!");
yield 3;
}
default -> -1;
};
return result;
}
// Java 13, switch expression returns a value via yield
private static int getValueViaYield(String mode) {
int result = switch (mode) {
case "a", "b":
yield 1;
case "c":
yield 2;
case "d", "e", "f":
// do something here...
System.out.println("Supports multi line block!");
yield 3;
default:
yield -1;
};
return result;
}
}
OUTPUT
1
2
Supports multi line block!
3
-1
참조
http://www.yes24.com/Product/Goods/15651484
http://www.yes24.com/Product/Goods/24259565
https://mkyong.com/java/java-13-switch-expressions/
- Total
- Today
- Yesterday
- Mac
- springboot
- docker
- localtime
- Linux
- 베리 심플
- LocalDateTime
- window
- config-location
- maven
- Spring
- Kotlin
- LocalDate
- k8s
- Bash tab
- mybatis config
- Spring Security
- Java
- mybatis
- Github Status
- 오라클
- input
- svn
- oracle
- rocky
- jQuery
- 북리뷰
- elasticsearch
- JavaScript
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |