자바 연산자
연산자란 ‘연산을 수행한느 기호’를 말한다.
연산자의 종류로는 산술연산자, 비트연산자, 관계연산자, 논리 연산자가 있다.
산술연산자
자바의 산술연산자에는 사칙연산자(+, - , *, /)와 %가 있다.
사칙 연산자
+, -, /, *의 연산자.
*,/의 경우 +와 -보다 우선순위가 높으므로 먼저 처리된다.
피연산자가 정수형인 경우, 나누는 수로 0을 사용할 수 없다.
나머지 연산자 %
왼쪽의 피 연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환하는 연산자.
오른쪽 피연산자로 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으로 바꾼다. 논리부정 연산자 ‘!’와 유사하다.
~연산자로 비트 전환되고 나면, 부호있는 타입의 피연산자는 부호가 반대로 변경된다. 즉 피연산자의 ‘1의 보수’를 얻을 수 있다.
쉬프트 연산자 << >>
피연산자의 각 자리를 오른쪽(>>) 또는 왼쪽 (<<)으로 이동한다고 해서 쉬프트 연산자라고 한다.
이때 자리이동으로 저장범위를 벗어난 값들은 버려지고 빈자리는 0으로 채워진다.
관계 연산자
‘비교 연산자’라고도 하며 두 피연산자를 비교하는데 사용되어진다.
비교하는 피연산자의 타입이 서로 다를 경우 자료형의 범위가 큰쪽으로 자동 형변환하여 피연산자의 타입을 일치시킨 후에 비교한다.
대소비교 연산자 < > ≤ ≥
두 피연산자의 값의 크기를 비교하는 연산자이다. 참이면 true, 거짓이면 false를 리턴한다.
기본형 자료형 중에서는 boolean타입을 제외하고 사용되어 지며, 참조형에는 사용할 수 없다.
비교 연산자 | 연산결과 |
---|---|
> | 좌변 값이 크면 true, 아니면 false |
< | 우변 값이 크면 true, 아니면 false |
≥ | 좌변 값이 크거나 같으면 true, 아니면 false |
≤ | 우변 값이 크거나 같으면 true, 아니면 false |
등가비교 연산자 == ≠
두 피연산자의 값이 같은지 다른지를 비교하는 연산자이다.
모든 자료형에 사용할 수 있다.
기본형의 경우 자료의 값이 같은지, 참조형의 경우 객체의 주소값이 같은지 알 수 있다.
기본형과 참조형은 서로 형변환이 되지 않으므로 비교할 수 없다.
비교연산자 | 연산결과 |
---|---|
== | 두 값이 같으면 true, 아니면 false |
≠ | 두 값이 다르면 true, 아니면 false |
자바 ==과 equals()
두 문자열을 비교할 때는 비교연산자 ‘==’대신 equlas()라는 메서드를 사용해야한다.
비교연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐이므로, 문자열의 내용이 같은지 비교하기 위해서는 eqlas()를 사용하는 것이다.
String의 경우 클래스이므로 똑같은 문자열이더라도 new를 통해서 생성할 경우 ‘==’연산자의 행위는 동일 객체를 참조하는지 아닌지를 비교한다. 그럴 경우 우리가 원하는 값을 구할 수 없기에 equals()메서드를 사용하여 두 객체의 주소값이 아닌 데이터 값을 비교하여야 한다.
논리 연산자
| X | Y | X && Y | X || Y | !x |
| --- | --- | --- | --- | --- |
| true | true | true | true | flase |
| true | false | false | true | |
| false | true | false | true | true |
| false | fakse | false | false | |
Instance of
객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자입니다.
반환타입은 boolean형이며, 특정 클래스 이거나, 부모클래스일 경우 true를 반환한다.
assignment(=) operator
대입 연산자’라고 하며 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용되어 진다. 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.
대입연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 있기때문에 식에서 제일 마지막에 수행되어진다.
화살표(->) 연산자.
자바 8부터 추가된 기능으로서 람다식으르 표현할때 사용되어진다.
인터페이스 추상 메소드 구현을 간단하게 해준다.
지금은 간단히 이러한 연산자를 통해 람다식이 표현되어진다로만 알고 15주차에 람다식을 다룰때 깊게 정리하도록 하겠다.
삼항연산자
피연산자를 3개를 가지는 조건 연산자이다.
간단한 if else문을 하나의 연산자로 표현할 수 있다.
-표현법
조건식 ? 값1 : 값2
int value = x > 20 ? 1 : 2
//x가 20보다 크면 value에 1저장. 아니면 2저장.
연산자 우선순위
식에 사용된 연산자가 둘 이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정된다.
일반적으로 괄호의 우선순위가 가장 높으며, 산술, 비교, 논리, 대입의 순서이다.
연산자 갯수로는 단항, 이항, 삼항 순서대로 우선순위를 가진다.
연산자의 진행방향은 왼쪽에서 오른쪽으로 진행되며, 단항 연산자와 대입연산자의 경우에는 오른쪽에서 왼쪽으로 진행된다.
Switch 연산자
기존에 존재하던 switch문법에 expression을 추가한 기능.
-차이점
- case : 말고 case → 사용 가능.
- break를 사용하지 않아도 된다.
- return 값이 존재할 수 있다.
- yield라는 새로운 예약어가 추가되었다.
'Java' 카테고리의 다른 글
Junit5 (0) | 2022.05.27 |
---|---|
조건문과 반복문 (0) | 2022.05.27 |
Java Final과 불변객체 (0) | 2022.05.27 |
Wrapper Class (0) | 2022.05.27 |
타입 추론 var (0) | 2022.05.27 |