-
[whiteship] 온라인스터디 - 3주차. 연산자IT 발자취.../JAVA 2020. 11. 28. 14:17
github.com/whiteship/live-study/issues/3
산술 연산자
산수 (Arithmetic) 연산자는 수학적인 계산에 사용되는 연산자이다.
+ 더하기 - 빼기 * 곱하기 / 나누기 % 나머지 public static void main(String[] args) { // result 의 값은 3 int result = 1 + 2; System.out.println(result); // result 의 값은 2 result = result - 1; System.out.println(result); // result 의 값은 4 result = result * 2; System.out.println(result); // result 의 값은 2 result = result / 2; System.out.println(result); // result 의 값은 10 result = result + 8; // result 의 값은 3 result = result % 7; System.out.println(result); }
비트 연산자 ( <<, >>, >>>)
연산식 설명 x << y 정수 x의 각 비트를 y만큼 왼쪽으로 이동시킨다.
( 빈자리는 0으로 채워진다 )x >> y 정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다.
(빈자리는 정수 a의 최상위 부호비트와 같은 값으로 채워진다 )x >>> y 정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다
(빈자리는 0으로 채워진다)class Test { public static void main(String[] args) { System.out.println("2 << 3 = " + (2 << 3)); System.out.println("16 >> 3 = " + (16 >> 3)); System.out.println("-16 >> 3 = " + (-16 >> 3)); System.out.println("-16 >>> 3 = " + (-16 >>> 3)); } } // 결과 // 2 << 3 = 16 // 16 >> 3 = 2 // -16 >> 3 = -2 // -16 >>> 3 = 536870910
관계 연산자
연산자 기능 > 왼쪽 항이 크면 참을, 아니면 거짓을 반환 < 왼쪽 항이 작으면 참을, 아니면 거짓을 반환 >= 왼쪽 항이 크거나 같으면 참을, 아니면 거짓을 반환 <= 왼쪽 항이 작거나 같으면 참을, 아니면 거짓을 반환 == 두 개 항의 값이 같으면 참, 아니면 거짓을 반환 != 두 개 항이 다르면 참, 아니면 거짓을 반환 논리 연산자
&&
(논리 곱)두 항이 모두 참인 경우에만 결과 값이 참입니다.
그렇지 않은 경우는 거짓이다.||
(논리 합)두 항 중 하나의 항만 참이면 결과 값은 참이다.
두 항이 모두 거짓이면 결과 값은 거짓이다.!
(부정)단항 연산자이다. 참인 경우는 거짓으로 바꾸고 거짓인 경우는 참으로 바꾼다. instanceof
instanceof는 객체 타입을 확인하는데 사용된다. 속성이 연산자이고 형변환이 가능한 지 해당 여부를 true 혹은 false로 가르쳐 준다.
@Test public void 타입추론_var() { //given var message = "Hello, Java 10"; //when //then assertThat(message).isInstanceOf(String.class); } @Test public void 타입추론_var() { //given var message = "Hello, Java 10"; //when //then assertTrue(message instanceof String); }
assignment(=) operator
대입 연산자 설명 = 왼쪽의 피연산자에 오른쪽 피연산자를 대입함 += 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결과값을 왼쪽의 피연자에 대입합 -= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결과값을 왼쪽의 피연산자에 대입함 *= 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결과값을 왼쪽의 피연산자에 대입합 /= 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결과값을 왼쪽의 피연산자에 대입함 %= 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 나머지값을 왼쪽의 피연산자에 대입함 &= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산 후, 그 결과값을 왼쪽의 피연산자에 대입함 |= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산 후, 그 결과값을 왼쪽의 피연산자에 대입함 ^= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산 후, 그 결과값을 왼쪽의 피연산자에 대입함 <<= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대합함 >>= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입함 >>>= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입함 화살표(->) 연산자
자바8부터 도입된 람다 표현식 작성을 위해서 사용된다.
(매개변수목록) -> { 함수 몸체 }
자바에서 람다 표현식을 작성할 때 유의해야할 사항은 다음과 같다.
1. 매개 변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수있다.
2. 매개변수가 하나인 경우에는 괄호(())를 생략할 수 있습니다.
3. 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호({})를 생략할 수 있습니다. (이때 세미콜론(;)은 붙이지 않음)
4. 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호({})를 생략할 수 없습니다.
5. return 문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결괏값이 됩니다. (이때 세미콜론(;)은 붙이지 않음)
skyoo2003.github.io/post/2016/11/09/java8-lambda-expression
() -> {} // No parameters; result is void () -> 42 // No parameters, expression body () -> null // No parameters, expression body () -> { return 42; } // No parameters, block body with return () -> { System.gc(); } // No parameters, void block body () -> { if (true) { return 12; } else { return 11; } } // Complex block body with returns (int x) -> x+1 // Single declared-type parameter (int x) -> { return x+1; } // Single declared-type parameter (x) -> x+1 // Single inferred-type parameter x -> x+1 // Parens optional for single inferred-type case (String s) -> s.length() // Single declared-type parameter (Thread t) -> { t.start(); } // Single declared-type parameter s -> s.length() // Single inferred-type parameter t -> { t.start(); } // Single inferred-type parameter (int x, int y) -> x+y // Multiple declared-type parameters (x,y) -> x+y // Multiple inferred-type parameters (final int x) -> x+1 // Modified declared-type parameter (x, final y) -> x+y // Illegal: can't modify inferred-type parameters (x, int y) -> x+y // Illegal: can't mix inferred and declared types
3항 연산자
조건식에 따라 결과를 저장하기 위해서 사용된다.
조건식? 피연산자1:피연산자2
아래는 간단한 테스트 코드이다.
"Pork"라는 것이 저장되어있는 String 타입의 지역 변수 a가 "Pork"와 동일하면 a에 "돼지고기"라는 값을 저장하고, 아니면 "소고기"를 저장한다.
class Test { public static void main(String[] args) { var a = "Pork"; a = a.equals("Pork") ? "돼지고기" : "소고기"; System.out.println(a); } }
연산자 우선 순위
우선순위 연산자 내용 1 최우선연산자
( ., [], () ) 2 단항연산자
( ++,--,!,~,+/- : 부정, bit변환>부호>증감) 3 산술연산자
( *,/,%,+,-,shift) < 시프트연산자 ( >>,<<,>>> ) > 4 비교연산자
( >,<,>=,<=,==,!= ) 5 비트연산자
( &,|,,~ ) 6 논리연산자
(&& , || , !) 7 삼항연산자
(조건식) ? : 8 대입연산자 =,*=,/=,%=,+=,-= (optional) Java 13. switch 연산자 ( 표현식?)
다음을 테스트해보기 위해서는 자바 13버전이 먼저 필요할 것같다.
File > project structure...
mkyong.com/java/java-13-switch-expressions/
// 전통적 swich 문법 private static int traditionlSwitch(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; }
자바 13버전부터 더이상 java 12 value break 구문은 컴파일 되지 않고 대신 yield를 사용합니다.
java 13 버전 부터는 값을 return 해줄 때 yield라는 키워들르 사용합니다.
// Java 13, 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; }
자바 12버전부터 switch문에서의 :를 ->로 변경하여 사용할 수 있으며, break문을 생략할 수 있다.
// 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; }
프리뷰 기능을 제공한다
$ javac JEP354.java D:\test>javac JEP354.java JEP354.java:39: error: multiple case labels are a preview feature and are disabled by default. case "a", "b": ^ (use --enable-preview to enable multiple case labels) JEP354.java:76: error: switch expressions are a preview feature and are disabled by default. int result = switch (mode) { ^ (use --enable-preview to enable switch expressions) JEP354.java:77: error: switch rules are a preview feature and are disabled by default. case "a", "b" -> 1; ^ (use --enable-preview to enable switch rules) 3 errors
javac --enable-preview --release 13 Example.java java --enable-preview Example
'IT 발자취... > JAVA' 카테고리의 다른 글
[whiteship] 온라인스터디 - 5주차. 클래스 (0) 2020.12.19 [whiteship] 온라인스터디 - 4주차. 제어문 (0) 2020.12.12 [whiteship] 온라인스터디 - 2주차. 자바 데이터 타입, 변수 그리고 배열 (0) 2020.11.22 [whiteship] 자바 온라인 스터디 - 1주차. JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가? (0) 2020.11.21 [whiteship] 자바 온라인 스터디 - 주차별 과제 (0) 2020.11.21 댓글