[무작정 기록] 연산자
연산자(Operators)
- 산술연산자(Arithmetic Operators)
: 말 그래도 숫자를 계산하는 연산자.
연산자 | 설명 | 예제 (a = 10, b = 3) |
+ | 덧셈 | System.out.println(a + b); // 13 |
- | 뺄셈 | System.out.println(a - b); // 7 |
* | 곱셈 | System.out.println(a * b); // 30 |
/ | 나눗셈(몫) | System.out.println(a / b); // 3 (정수 연산) |
% | 나머지 | System.out.println(a % b); // 1 (나머지) |
- 대입연산자(Assignment Operators)
: 값을 변수에 할당하는 연산자.
- 복합치환연산자(Compound Assignment Operators)
: 산술연산자와 대입 연산자를 함께 사용하는 연산자.
즉 변수자신에 어떠한 연산을 하여 다시 변수자신에 저장하는 연산자
대입 분류 | 연산자 | 설명 | 예제 (a = 10) | 결과 |
대입 | = | 대입 | a = 5 | a = 5 |
복합 치환 대입 | += | 덧셈 후 대입 | a += 3 | a = 13 |
복합 치환 대입 | -= | 뺄셈 후 대입 | a -= 2 | a = 8 |
복합 치환 대입 | *= | 곱셈 후 대입 | a *= 4 | a = 40 |
복합 치환 대입 | /= | 나눗셈 후 대입 | a /= 2 | a = 5 |
복합 치환 대입 | %= | 나머지 후 대입 | a %= 3 | a = 1 |
복합 치환 대입 | >>= | 오른쪽 이동 후 대입 | a >>= 2 | a = 2 |
복합 치환 대입 | <<= | 왼쪽 이동 후 대입 | a <<= 2 | a = 40 |
- 비교연산자(Relational Operators)
: 비교연산자는 결과의 값이 boolean 이 제공하는 값인 'true', 'false'로 받을 수 있다.
즉 boolean 타입의 결과가 제공된다.
(String에 'true', 'false'를 넣으면 텍스트로 인식한다.)
연산자 | 설명 | 예제 (a = 1, b = 2) | 결과 |
== | 같음 | a == b | false |
!= | 다름 | a != b | true |
> | 크다 | a > b | false |
< | 작다 | a < b | true |
>= | 크거나 같다 | a >= b | false |
<= | 작거나 같다 | a <= b | true |
- 논리연산자(Logical Operators)
: 여러개의 조건을 조합하여 참(true) 또는 거짓(false)을 반환한다.
즉 비교연산자처럼 조건을 평가하는데 사용되지만, 그 사용 목적과 결과값의 타입이 다르다.
조건문에 자주 사용된다.
연산자 | 의미 | 설명 | 예제 (a = 1, b = 2) | 결과 |
&& (*) | 논리 AND 연산자의 단축평가 | 둘다 true 일때 true (둘 중 하나만 false 여도 false, 첫번째 값이 false 이면 바로 false) |
a && b | false |
! | 논리 NOT | 값을 반대로 변환 ( 즉 ~가 아닐경우 ) |
1. !a 혹은 !b 2. !(a != 0) |
1. error, 형이 int이기 때문에 2. false |
|| (*) | 논리 OR 연산자의 단축평가 | 하나만 true 여도 true (둘 중 하나만 true 여도 true, 첫번째 값이 true 이면 바로 true) |
1. a || b 2. (a != 0) || (b != 0) |
1. error, 형이 int이기 때문에 2. true |
(*) 단축평가 (Short-Circut Evalution) : 불필요한 연산을 수행하지 않고 결과를 결정하는 최적화 기법
※ Short-Circut Evalution 와 Short Cut operation의 차이
Short-Circut Evalution은 하나의 기법으로 Short Cut operation의 한 부분이다.
즉 "is-a" 관계이다.
- 비트연산자(Bitwise Operators)
: 정수형(int, long 등)의 개별 비트를 대상으로 연산
- 비트이동연산자(Bitwise Shift Operators)
: 이진수로 표현된 숫자에서 비트의 위치를 왼쪽 또는 오른쪽으로 이동시키는 연산자.
비트분류 | 연산자 | 의미 | 설명 | 예제 (a = 1, b = 2) | 결과 |
비트 | & | 비트 AND | 두 비트가 모두 1일때만 1을 반환 (다르면 0을 반환) |
a & b | 0 |
비트 | | | 비트 OR 연산자 | 하나라도 1이면 1을 반환 | a | b | 3 |
비트 | ^ | 비트 차 | 두 비트가 다르면 1, 같으면 0을 반환 | a ^ b | 3 |
비트 | ~ | 비트 반전 | 모든 비트의 반전 (1의 보수) | ~a, ~ b | -2, -3 |
비트이동 | << | 왼쪽 시프트 | 비트를 왼쪽 으로 (n칸만큼)이동 | a << b | 4 |
비트이동 | >> | 오른쪽 시프트 | 비트를 오른쪽으로 (n칸만큼) 이동 | a >> b | 0 |
비트이동 | >>> | 부호없는 오른쪽 시프트 | 비트를 오른쪽으로 이동하고 0으로 채움 | a >>> b | 0 |
* 비트 논리결과 표
예시값 | 결과값 | |||
X | Y | & ( 비트 AND ) | | ( 비트 OR ) | ^ ( 비트 차 ) |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
- 삼항연산자(Ternary Operators) 혹은 조건식연산자
: 간단한 조건문을 한줄로 표현 할 수 있게 해주는 연산자.
if else문을 한줄로 줄여 놓은것.
하지만 너무 복잡하면 if-else 를 이용하는게 더 가독성이 좋댜.
연산자 구조 | 설명 | 예제 (a = 1, b = 2) | 결과 |
( 항1 )? 항2: 항3 | ( 항1 ) 자리에는 조건식이 온다. (즉 무엇이 올것인지) (만약 항1이 참이라면 항2를 수행, 그렇지 않으면 항3을 동작) 항2, 항3 자리에는 변수가 올 수도 있고 수식이 올 수도 있다. (하지만 System.out.println 같은 명령문은 안된다.) (하지만 System.out.println 안에 삼항연산자를 직접 입력 할 수 있다.) |
a < b ? a : b | (true) 1 반환 |
- instanceof연산자(instanceof Operators)
: 객체가 특정 클래스 또는 그 자식 클래스의 인스턴스인지 확인하는데 사용
연산자 구조 | 설명 | 예제 (a = 1, b = 2) | 결과 |
객체 instanceof 클래스 | 객체가 해당 클래스 또는 상복받은 클래스의 인스턴스이면 true, 아니면 false 반환 | a instanceof b | error -> 컴파일 오류 instanceof는 참조형(객체)에서만 사용가능하다. ! 기본형(int, double, char)등에서는 instanceof를 사용할 수 없다. |
! 올바른 사용법 ! | |||
1. Integer(객체)로 변환하여 사용 | Integer a = 1; a instanceof Integer; |
true | |
2. 클래스 또는 인터페이스 활용 | class Animal{} class Dog extends Animal{} Animal a = new.dog(); a instanceog Dog; a instanceog Animal; |
-> true -> true |
- 증감연산자(increment & Decrement Operators)
: 변수의 값을 1씩 증가 혹은 감소 시키는 연산자.
연산자 | 의미 | 설명 | 예제 (a = 1, b = 2) | 결과 |
++N | 전위 증가 연산자(Pre-increment) | 먼저 1 증가, 그 후 연산 수행 | ++a a |
2 2 |
N++ | 후위 증가 연산자(Post-increment) | 연산 후 1 증가 | b++ b |
1 2 |
--N | 전위 증가 연산자(Pre- decrement) | 먼저 1 감소, 그 후 연산 수행 | --a a |
0 0 |
N-- | 후위 증가 연산자(Post-decrement) | 연산 후 1 감소 | b-- b |
1 0 |