목적
자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선 순위
- (optional) Java 13. switch 연산자
산술 연산자
산술 연산자는 사칙연산을 다루는 기본적이면서도 가장 많이 사용되는 연산자 이다.
산술 연산자는 [ +, -, *, /, % ] 5가지가 있고 연산 순서는 { *, /, % } -> { +, - } 이다.
사칙연산자
사친 연산자 같은 경우는 산술 연산자 중 { +, -, *, / } 로 나타낼 수 있다.
그리고 사칙 연산자에선 예시로 int 형의 연산 중 10 / 4 같은경우 우리는 2.5라 생각하지만 2라고 나온다. int타입은 소수점을 정희하지 못하으몰 정수만 남고 소수점 이하는 버려진다. 그래서 올바른 연산을 위해선 한 쪽을 실수형의 값으로 바꿔 결과를 가져야 한다.
피 연산자가 정수형인 경우, 나누는 수를 0으로 사용할 수 없다. -> 컴파일 시엔 정상적이지만 실행 시 오류가 발생
이때 0을 실수형 0 인 0.0으로 나누는 것은 가능하지만 실행 시(ArthmeticException) 오류가 난다.
또 byte형 같은 경우는 연산을 시행하면 int형보다 작기 때문에 byte를 int형으로 바꿔서 연산을 수행해야 한다.
byte a = 10;
byte b = 20;
byte c = a + b;
때문에 byte c 같은 경우 int형으로 바뀐 값을 넣으려 하니 에러가 발생한다.
나머지 연산자
왼쪽 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환하는 연산자로 오른쪽 피연산자를 0으로 사용할 수 없다. 주로 짝, 홀, 배수 검사등에 사용한다.
비트 연산자
비트 연산자는 피연산자를 비트단위로 논리 연산한다. 피 연산자를 이진수로 표현했을 때 각 자리를 규칙에 따라 연산을 수행하며 피 연산자로 실수는 허용하지 않는다. 정수만 허용된다.
x | y | x | y | x & y | x ^ y |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
(OR 연산자) : 피연산자 중 한쪽 값이 1이면, 1의 결과를 얻는다. |
& (AND 연산자) : 양쪽이 1이여야 1을 결과로 얻는다.
^ (XOR 연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다.
~(전환 연산자) : 피연산자를 2진수로 표현했을 때, 0은 1로 1은 0으로 바꾼다. (보수를 얻을 때 사용)
«, » (쉬프트 연산자) : 피연산자의 각 자리(2진수를 표현했을 때)
관계 연산자
관계 연산자는 비교 연산자라 부를 수 있으며 주로 조거눔ㄴ과 반복문 조건식에 사용되며 결과는 true 아니면 false 뿐이다.
대소비교 연산자
[ <, >, <=, >= ] 두 피연산자의 값의 크기를 비교하는 연산자이다. boolean을 제외한 자료형에 다 사용할 수 있지만, 참조형에는 사용할 수 없다.
등가비교 연산자
[ ==, != ] 두 피연산자의 값이 같은지 또는 다른지 비교하는 연산자이다. 모든 자료형에 사용할 수 있고 참조형의 경우엔 객체의 주소값을 저장하기 때문에 두 개의 피연산자가 같은 객체를 가리키고 있는 지 알 수 있다.
기본형과 참조형은 서로 형변환이 가능하지 않기 때문에 등가비교 연산자(==, !=) 로 기본형과 참조형을 비교할 수 없다.
그리고 두 문자열을 비교할 땐 비교 연산자 대신 equals() 라는 메서드를 사용해야 한다. 문자열의 내용이 같은 지 비교하기 위해서이다.
논리연산자
논리 연산자는 두개의 조건이 결합된 경우는 [ &&, | ] 을 사용하여 나타낸다. |
x | y | x || y | x && y |
---|---|---|---|
true | true | true | true |
true | false | true | false |
false | true | true | false |
false | false | false | false |
논리연산자의 장점은 효율적인 연산을 한다는 것이다.OR 연산자를 예로 들면 두 피연산자 중 한쪽만 참이면 참이 되기 때문에 다른 쪽은 평가하지 않는다.
논리부정연산자
[ ! ] 이 연산자는 반대로 결과를 반환한다. 따라서 전원버튼이나 토글 버튼을 논리적으로 구현할 수 있다.
instance of
참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 연산자를 사용한다. 주로 조건문에 사용되며 식은 ( 참조변수 instanceof 클래스명) 이 피연산자로 위치한다. 어떤 타입에 대한 instanceof연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다.
그리고 자신의 조상 타입의 경우에도 true라는 결과를 얻는다.
Assignment(=) operator (할당 연산자)
할당 연산자는 대입 연산자랑 같은 말이며 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다.
할당 연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 있기 때문에 식에서 제일 나중에 수행된다. 그리고 연산 진행방향이 오른쪽에서 왼쪽이다.
그리고 연산자는 단순할당 연산자랑 복합 할당 연산자로 나뉘어져 있는데 단순 할당 연산자는 우리가 아는 = 이것이고 복합 대입 연산자는 나머지를 의미한다.
할당 연산자의 종류
= : 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장합니다.
+= : 오른쪽 피연산자의 값을 왼쪽 피연산자와 더해서 왼쪽 피연산자에 저장합니다.
-= : 오른쪽 피연산자의 값을 왼쪽 피연산자에서 빼서 왼쪽 피연산자에 저장합니다.
*= : 오른쪽 피연산자의 값을 왼쪽 피연산자와 곱해서 왼쪽 피연산자에 저장합니다.
/= : 왼쪽 피연산자를 오른쪽 피연산자로 나눠서 왼쪽 피연산자에 저장합니다.
%= : 왼쪽 피연산자에서 오른쪽 피연산자로 나눈 나머지(모듈러스)를 왼쪽 피연산자에 저장합니다.
«= : 오른쪽 피연산자 값의 비트수만큼 왼쪽 피연산자를 왼쪽으로 이동해서 왼쪽 피연산자에 저장합니다.
»= : 오른쪽 피연산자 값의 비트수만큼 왼쪽 피연산자를 오른쪽으로 이동해서 왼쪽 피연산자에 저장합니다.
&= : 왼쪽, 오른쪽 피연산자의 비트 AND를 구해서 왼쪽 피연산자에 저장합니다.
** | =** : 왼쪽, 오른쪽 피연산자의 비트 OR를 구해서 왼쪽 피연산자에 저장합니다. |
^= : 왼쪽, 오른쪽 피연산자의 비트 XOR를 구해서 왼쪽 피연산자에 저장합니다.
화살표 연산자
화살표 연산자 같은 경우는 람다에서 주로 사용되며 식별자 없이 실행가능한 함수를 가리킬 때? 매개변수들이 무엇인지 가리켜? 주려고 사용한다.
Print print = new Print(i){
System.out.println(i);
};
//윗 부분을 아래처럼 나타낼 수 있다.
Print print = (i) -> System.out.println(i);
이렇게 쓰면 장점이 가독성이 높아진다는 것입니다.
3항 연산자
3항 연산자의 경우에는 조건식 1, 2, 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 조건 연산자 중 하나뿐이다.
조건식 ? 식1 : 식2
조건 연산자의 결과가 true이면 식1이, false 이면 식2가 연산결과가 된다.가독성을 높이기 위해 괄호를 사용하기도 한다.
일단 이것의 장점은 if문에 있어 조건연산자가 간략하다는 것이다.
연산자 우선순위
- 산술 > 비교 > 논리 >대입, 대입은 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3), 단항의 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
종류 | 결합규칙 | 연산자 | 우선순위 |
---|---|---|---|
단향 연산자 | <— | ++, –, +, =, ~, ! (type) | 높음 |
산술 연산자 | —> | *, /, % | |
—> | +, - | ||
—> | «, » | ||
비교연산자 | —> | <, >, <=, >=, instanceof | |
—> | ==, != | ||
논리연산자 | —> | & | |
—> | ^ | ||
—> | | | ||
—> | && | ||
—> | || | ||
삼항연산자 | —> | ? : | |
대입 연산자 | <— | =, +=, -=, *=, /=, %=, «=, »=, &=, ^=, |= | 낮음 |