-
[live-study] 3주차 :: 연산자JAVA/라이브 스터디 | whiteship 2020. 12. 28. 01:30
참고도서 : Java의 정석, Java in a Nutshell
0. 연산자
연산자란?
- 연산을 수행하는 기호를 의미한다.
연산자와 피연산자
- 연산자(Operator) : 연산을 수행하는 기호 (+, - , * , / 등)
- 피연산자(Operand) : 연산하는 대상 (변수, 상수, 리터럴 등)
연산자의 종류
- 단항 연산자 : 피연산자가 하나 뿐인 연산자
- 부호 연산자 (+, -)
- 증감 연산자 (++, --)
- 논리 부정 연산자 (!)
- 비트 반전 연산자 (~)
- 이항 연산자 : 피연산자가 두 개인 연산자
- 산술 연산자 (+, -, *, / , %)
- 문자열 연결 연산자 (+)
- 대입 연산자 (=, += ,-= ...)
- 비교 연산자 (<, <= , > , >= , ...)
- 논리 연산자 (&&, ||, &, | , ....)
- 비트 논리 연산자 (&, |, ^)
- 비트 이동 연산자 (<< , >> , >>> )
1. 산술 연산자
산술 연산자 (Arithmetic Operator)
- 산술 연산자는 사칙 연산자와 나머지 연산자가 있다.
- 곱셈(*), 나눗셈(/), 나머지(%) 연산자가 덧셈(+), 뺄셈(-) 연산자보다 우선순위가 높다.
덧셈 ( + )
- 일반적인 덧셈
- 타입이 다른 두 피연산자간의 덧셈
- 문자열 덧셈
뺄셈 ( - )
- 일반적인 뺄셈
- 문자 뺄셈 (아스키코드)
곱셈 ( * )
- 일반적인 곱셈
- 오버플로우
나눗셈 ( / )
- 일반적인 나눗셈
- 나눗셈은 나누는 수로 0을 사용할 수가 없다. 0으로 나누게 되면 컴파일은 정상적으로 되지만, 실행 시 오류 (ArithmeticException)이 발생하게 된다.
나머지 ( % )
- 나머지 연산자는 말 그대로 나누기를 한 후 남은 나머지 값을 결과로 반환하는 연산자 이다.
- 나눗셈과 마찬가지로 나누는 수로 0을 사용할 수 없다. 하지만 음수는 허용한다. 단, 부호는 무시되므로 절댓값으로 나눈 결과와 같다.
2. 비트 연산자비트 연산자
- 피연산자를 비트단위로 논리 연산하는 것을 말한다. 실수 등의 피연산자에서는 사용할 수 없다.
- 만약, 피연산자 둘 중 하나가 long인 경우에는 결과 값이 long타입으로 반환된다. 이 경우를 제외하고는 int형으로 결과값이 반환된다.
- low-level 연산자로서, 모던 자바에서는 low-level 작업을 제외하고는 자주 사용되지는 않는다.
OR 연산자 ( | )
- 두 개의 정수 피연산자에서 둘 중 한쪽 비트 값이 1이면 결과값 1을 반환하고, 둘 다 0인 경우에만 0을 반환한다.
AND 연산자 ( & )
- 두 개의 정수 피연산자에서 양 쪽 모두 비트 값이 1인 경우에만 결과값 1을 반환하고, 나머지의 경우에는 0을 반환한다.
XOR 연산자 ( ^ )
- 두 개의 정수 피연산자에서 서로의 값이 다를 때만 결과값 1을 반환하고, 같은 경우에는 0을 반환한다.
전환 연산자 ( ~ )
- 비트 0인 경우에는 결과값이 1로, 비트가 1인 경우에는 결과값이 0으로 반환된다.
쉬프트 연산자 ( << , 왼쪽)
- x << n : 10진수 x의 2진수를 왼쪽으로 n만큼 이동한다라는 뜻이다. 결과값은 x * 2^n 이다.
쉬프트 연산자 ( >> , 오른쪽)
- x >> n : 10진수 x의 2진수를 오른쪽으로 n만큼 이동한다라는 뜻이다. 결과값은 x/2^n 이다.
3. 관계 연산자관계 연산자 (Relational Operator)
- 두 피연산자를 비교하여 관계를 파악할 수 있는 연산자이다. 연산의 결과는 true 또는 false이다.
대소비교 연산자
- < , > , <= , >=
등가비교 연산자
- ==, !=
문자열의 비교
- .equals(), .equalsIgnoreCase()
4. 논리 연산자
논리 연산자 (Logical Operator)
- 논리 연산자는 두개 이상의 조건을 연결하는데 사용된다.
&&
- 피연산자 두 개 다 'true' 이어야 true가 결과값으로 나온다.
||
- 피연산자 둘 중에 하나만 'true' 이어도 true를 결과값으로 얻을 수 있다.
논리 연산자 (Logical Operator)
- 논리 연산자
5. instanceofinstanceof 연산자
- instanceof 연산자는 왼쪽 피연산자가 오른쪽 피연산자의 타입이거나 형변환이 가능한지를 true 또는 false로 변환하는 연산자이다.
- 참조타입, 객체에만 사용이 가능하고 기본형 타입과 변수에는 사용할 수가 없다.
- instanceof 연산자는 왼쪽 피연산자로는 참조변수가 필요하고, 오른쪽 피연산자로는 타입명이 들어간다.
- 만약 왼쪽 피연선자가 null 인 경우에는 언제나 false를 반환한다.
6. assignment(=) operator대입 연산자 ( = )
- 대입 연산자는 변수에 값 또는 수식의 연산 결과를 저장하는데 사용된다.
- 대입 연산자는 연산자들 중에 우선순위가 가장 낮으므로, 식에서 가장 늦게 수행된다.
- 대입 연산자(=)를 기준으로 왼쪽은 반드시 변수처럼 값을 변경할 수 있는 것이어야 하고, 오른쪽은 변수, 식, 상수 등 가능하다.
복합 대입 연산자
- 대입 연산자는 다른 연산자들과 결합하여 사용할 수 있다.
7. 화살표(->) 연산자화살표 연산자
- 자바 8에서부터 지원되는 람다 표현식(Lambda expression)이다.
- (매개변수 목록) -> {함수몸체}
8. 3항 연산자3항 연산자
- 조건식, 식1, 식2 세 개의 피연산자를 필요로 한다.
- 조건식이 true이면 ? 바로 뒤의 식이 결과값을 반환되고, false이면 : 뒤의 식이 결과값으로 반환된다.
9. 연산자 우선 순위
연산자 우선 순위
- 연산자가 둘 이상인 경우, 연산자는 우선순위에 의해서 연산순서가 결정된다.
- 산술 > 비교 > 논리 > 대입 순
- 단항 > 이항 > 삼항 순
10. (optional) Java 13. switch 연산자
Java 13 switch 연산자
- case를 쉼표로 구분하여 한줄로 쓸 수 있게 되었다. 그리고 람다 표현식과 결합하여 표현도 가능하다.
- 기존방식은 아래와 같이 표현하였다.
- 13부터 지원되는 방식에서는 위와는 다르게 한 줄로 작성하고 쉼표로 구분지을 수 있다. 또한 람다식 표현도 함께 사용할 수 있다.
- 일종의 return 키워드인 yield 키워드도 사용할 수 있다.
참고자료
'JAVA > 라이브 스터디 | whiteship' 카테고리의 다른 글
[live-study] 6주차 :: 상속 (0) 2021.01.09 [live-study] 5주차 :: 클래스 (0) 2021.01.01 [live-study] 4주차 :: 제어문 (0) 2020.12.31 [live-study] 2주차 :: 자바 데이터 타입, 변수 그리고 배열 (0) 2020.12.26 [live-study] 1주차 :: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) 2020.12.26