1.산술 연산자
2.비트 연산자
3.관계 연산자
4.논리 연산자
5.instanceof
6.assignment(=) operator
7.화살표(->) 연산자
8.3항 연산자
9.연산자 우선 순위
10.(optional) Java 13. switch 연산자
1.산술연산자
산술연산자에 들어가기에 앞서 먼서 연산자에 대해 알아보자!
연산자란 '연산을 수행하는 기호'를 이야기한다.
'+'는 덧셈 연산자 라고 하고 , '-'는 뺄셈 연산자 라고 한다.
연산자를 수행하려면 반드시 연산의 대상이 있어야 하는데 대상에 필요한 연산은 피연산자라고 하며 피연산자로는 상수,변수, 식등이 있다.
연산자: 연산을 수행하는 기호 (+,-,%등등)
피연산자:연산자의 작업대상(변수,상수등등)
(ex)x-3 이라는 식이 있을때 x와 3은 피연산자 되고 -는 연산자이다.
-산술연산자의 종류
+: 덧셈 연산자. 덧셈 연산자는 숫자 피연산자를 더한값, 또는 문자열을 연결한 값을 생성한다. ex) x+y
-: 뺄셈 연산자. 뺄셈 연산자는 두 개의 피 연산자를 뺀 값을 생성한다.
ex) x-y
: 곱셈 연산자. 곱센 연산자는 두 연산자의 곱을 생성한다.
ex)x y
/: 나머지 연산자.나머지 연산자는 왼쪽 피연산자를 피제수로, 오른쪽 피연산자를 제수로 한 몫을 생성한다.
ex)x/y
2.비트 연산자
비트연산자는 비트(bit)단위로 논리연산을 할때 사용하는연산자 이다.
비트단위로 전체비트를 왼쪽이나 오른쪽으로 이동시킬때도 사용한다,
-비트 연산자 의 종류
&: 대응되는 비트가 모두 1이면 1을 반환한다(비트 and 연산)
|: 대응되는 비트 중에서 하나라도 1이면 1을 반환한다(비트 or 연산)
^: 대응되는 비트가 서로 다르면 1을 반환한다.(비트 xor 연산)
~: 비트를 1이면0으로,0이면 1로 반전시킨다.(비트 not 연산)
"<<":지정한 수만큼 비트들을 전부 왼쪽으로 이동시킨다.(left shift연산)
">>":부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킨다.(right shift연산)
3.관계 연산자
비교연산자라고도 한다.
-비교 연산자의 종류
">":왼쪽항이 크면 참, 아니면 거짓을 반환한다.
"<":왼쪽항이 작으면 참, 아니면 거짓을 반환한다.
">=":왼쪽항이 오른쪽항 보다 크거나 같으면 참, 아니면 거짓을 반환한다.
"<=":왼쪽항이 오른쪽항 보다 작거나 같으면 참, 아니면 거짓을 반환한다.
"==":두개 항의 값이 같으면 참, 아니면 거짓을 반환한다.
"!=":두개 항이 다르면 참, 아니면 거짓을 반환한다.
4.논리연산자
논리연산자는 주어진 논리식을 판단하여 참(true),거짓(false)를 결정하는 연산자이다.
-논리연산자의 종류
&&:논리식이 모두 참이면 1을 반환한다.(논리 and 연산)
||:논리식 중 에 하나 라도 참이면 1을 반환한다.(논리 and 연산)
!:논리식의 결과가 참이면 0을,거짓이면 1을 반환한다.(논리 not 연산)
5.instanceof
instanceof 연산자는 참조 변수가 참조하고 있는 인스턴스의 실제 타입을 반환해준다.
해당 객체가 어떤 클래스나 인터페이스로부터 생성되었는지를 판별해준다.
-instanceof 문법
인스턴스이름 instanceof 클래스 또는 인터페이스 이름
6.assignment(=) operator]
대입연산자라고도 하며 대입연산자는 변수에 값을 대입할때 사용하는 이항연산자이다. 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.
-대입연산자의 종류
=:왼쪽의 피연산자에 오른쪽 피연산자를 대입한다.
+=:왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후 , 그 결과값을 왼쪽의 피연산자에 대입한다.
-=:왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀후, 그 결과값을 왼쪽의 피연산자에 대입한다.
*=:왼쪽의 피연산자에서 오른쪽의 피연산자를 곱한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
/+:왼쪽의 피연산자에서 오른쪽의 피연산자를 나눈후, 그 결과값을 왼쪽의 피연산자에 대입한다.
%=:왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀후, 그 나머지값을 왼쪽의 피연산자에 대입한다.
&=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND연산한후 , 그결과값을 왼쪽의 피연산자에 대입한다.
|=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR연산한후 , 그결과값을 왼쪽의 피연산자에 대입한다.
^=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR연산한후 , 그결과값을 왼쪽의 피연산자에 대입한다.
<<=:왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
">>=":왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
">>>=":왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한후, 그 결과값을 왼쪽의 피연산자에 대입한다.
7.->연산자
자바의 1.8에서 추가된 람다식이다.
람다식으로 인해 자바는 객체지향언어이면서 함수형 언어 기능까지 갖추게 되었다.
람다식이란?
메서드를 하나의 식 으로 표현 한것 이다.
또한 람다식은 함수를 간략하게 하면서도 명확한 식으로 표현할수 있게 해준다.
메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어져 람다식을 '익명함수'라고도 한다.
ex) int[] arr= new int [5];
Arrays.setAll(arr,(i)->(int)(Math.random()*5)+1);
8.삼항연산자
삼항연산자는 피연산자를 세개나 가지는 조건 연산자이다.
-삼항연산자 문법
조건식? 반환값1:반환값2;
ex) int a=(5<4)?50:40;
9.연산자의 우선 순위
연산자의 식에 두가지 이상의 연산자가 사용될 경우, 연산자의 우선 순위에 의해 연산자가 결정된다.
-연산자의 우선순위
1.최우선 연산자:.[],()
2.단항연산자:!,~,+/-,++/--
3.산술연산자:+,-,,/,%
4.비교연산자:>,<,>=,<=,==,!=
5.비트연산자:&,|,~
6.논리연산자:&&,||,!
7.삼항연산자:(조건식)?
8.대입연산자:=,=,/=,%=,+=,-=
10.(optional) Java 13. switch 연산자
optional은 자바 8에서 최초로 도입되었다.
Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다.
따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다.
이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.
즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다.
-optional 객체의 생성
of() 메소드나 ofNullable() 메소드를 사용하여 Optional 객체를 생성할 수 있다.
of() 메소드는 null이 아닌 명시된 값을 가지는 Optional 객체를 반환한다.
만약 of() 메소드를 통해 생성된 Optional 객체에 null이 저장되면 NullPointerException 예외가 발생한다.
따라서 만약 참조 변수의 값이 만에 하나 null이 될 가능성이 있다면, ofNullable() 메소드를 사용하여 Optional 객체를 생성하는 것이 좋다.
ofNullable() 메소드는 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환하며, 명시된 값이 null이면 비어있는 Optional 객체를 반환한다.
ex)
Optional opt = Optional.ofNullable("자바 Optional 객체");
System.out.println(opt.get());
-Optional 객체에 접근
get() 메소드를 사용하면 Optional 객체에 저장된 값에 접근할 수 있다.
만약 Optional 객체에 저장된 값이 null이면, NoSuchElementException 예외가 발생합다.
따라서 get() 메소드를 호출하기 전에 isPresent() 메소드를 사용하여 Optional 객체에 저장된 값이 null인지 아닌지를 먼저 확인한 후 호출하는 것이 좋다.
ex)
Optional opt = Optional.ofNullable("자바 Optional 객체");
if(opt.isPresent()) {
System.out.println(opt.get());
}
메소드를 사용하여 null대신에 대체할 값을 지정할수 있다.
1. orElse() 메소드 : 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환함.
2. orElseGet() 메소드 : 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환함.
3. orElseThrow() 메소드 : 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킴.
ex)
Optional opt = Optional.empty(); // Optional를 null로 초기화함.
System.out.println(opt.orElse("빈 Optional 객체"));
System.out.println(opt.orElseGet(String::new));
-기본 타입의 Optional 클래스
클래스명 : 저장된 값의 접근하는 메소드
Optional : t get()
OptionalInt 클래스 : int getAsInt()
OptionalLong 클래스 : long getAsLong()
OptionalDouble 클래스 : double getAsDouble()
Optional 메소드
static Optional empty() : 아무런 값도 가지지 않는 비어있는 Optional 객체를 반환함.
T get() : Optional 객체에 저장된 값을 반환함.
boolean isPresent() : 저장된 값이 존재하면 true를 반환하고, 값이 존재하지 않으면 false를 반환함.
static Optional of(T value): null이 아닌 명시된 값을 가지는 Optional 객체를 반환함.
static Optional ofNullable(T value): 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환하며, 명시된 값이 null이면 비어있는 Optional 객체를 반환함.
T orElse(T other): 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환함.
T orElseGet(Supplier<? extends T> other):
저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환함.
T
orElseThrow(Supplier<? extends X> exceptionSupplier): 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킴.
-Switch 연산자
switch문법은 하나의 조건식으로 많은 경우의 수를 처리할수 있고 표현도 간결하기 때문에 많이쓴다.
13버전에서는 switch 수정사항이 생겼는데 switch~break 에서 yield로 변경되었다.
참조
자바의 정석
http://www.tcpschool.com/
https://openjdk.java.net/jeps/354
https://mkyong.com/java/java-13-switch-expressions/
https://blog.naver.com/PostView.nhn?blogId=kgw1988&logNo=221678438564&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=true&from=search