✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다.
연산자라는 게 뭐지? 벌써 조금 배웠다고?
기본 자료형에서 boolean을 제외한 자료형들만 다음 연산자들을 사용할 수 있고, 예외로 참조 자료형인 String만 + 연산이 가능하다.
연산자 종류
- = : 대입 연산자(assignment operator)
- + : 더하기 연산자 (additive operator)
- - : 빼기 연산자 (subtraction operator)
- * : 곱하기 연산자 (multiplication operator)
- / : 나누기 연산자 (division operator)
- % : 나머지 연산자 (remainder operator)
간단하게 계산하는 복합 대입 연산자들
복합 대입 연산자 (Compound Assignment Operator)
- += : 기존 값에 우측 항의 값을 더함
- -= : 기존 값에 우측 항의 값을 뺌
- *= : 기존 값에 우측 항의 값을 곱함
- /= : 기존 값을 우측 항의 값으로 나눔
- %= : 기존 값을 우측 항의 값으로 나눈 나머지
피연산자가 하나인 것도 있어요. 이걸 단항 연산자라고 하죠
단항 연산자 종류
- + : 단항 플러스 연산자 (Unary plus operator)
- - : 단항 마이너스 연사자 (Unary minus operator)
- ++ : 증가 연산자 (Increment operator)
- -- : 감소 연산자 (Decrement operator)
- ! : 논리 부정 연산자 (Logical complement operator)
- ~ : 틸드
+와 -
연산자 기호 앞에 아무런 변수나 숫자가 없다면
- +는 "변수 x (1)"을 의미하고,
- -는 "변수 x (-1)"을 의미한다.
즉, 부호를 의미하는 기호이다.
음수를 나타내는 -기호는 의미가 있지만 +기호는 없어도 양수임을 나타내므로 양수라는 것을 명시적으로 보여줄 때 사용한다.
++와 --
증감 연산자로
- ++는 값을 1 증가시켜주고
- --는 값을 1 감소시켜준다.
다른 단항 연산자들과는 달리 증감연산자는 변수의 앞에 붙을 수도 있고 뒤에 붙을 수도 있다.
- 앞 : 변수를 참조하기 전에 증가/감소
- 뒤 : 변수를 참조하고 증가/감소
int intValue = 1;
System.out.println(intValue++);
System.out.println(intValue);
System.out.println(++intValue);
위 코드를 수행하면 순서대로 1, 2, 3이라는 숫자가 출력된다.
!
boolean 타입에서만 사용할 수 있는 연산자로 값을 반대로 만들어준다.
~
2진수로 되어 있는 비트 값을 전부 반대로 바꿔주는 연산자이다.
자바에서 계산하는 순서를 알아두면 좋다
연산자 우선순위
구분 | 연산자 | 우선 순위 |
괄호 | () | 1 |
단항 연산자 | ++ -- + - ! ~ | 2 |
산술 연산자 | * / % | 3 |
+ - | 4 |
사칙연산의 순서를 따르고, 괄호 안에 있는 것을 가장 먼저 계산해야 한다.
뭔가를 비교할 때는 어떻게 하지?
비교 연산자
- == : 같음 (equal to)
- != : 같지 않음 (not equal to)
- > : (왼쪽 값이) 큼 (greater than)
- >= : (왼쪽 값이) 같거나 큼 (greater than or equal to)
- < : (왼쪽 값이) 작음 (less than)
- <= : (왼쪽 값이) 같거나 작음 (less than or equal to)
모든 비교 연산자의 결과는 반드시 boolean 타입으로 조건을 충족하면 true, 그렇지 않으면 false가 된다.
==과 !=
등가 비교 연산자로 Equality Operator라고 부른다.
두 개의 값이 같은지, 다른지를 확인할 때 사용한다.
등가 비교 연산자는 모든 타입에서 사용할 수 있다.
기본 자료형은 같은 종류끼리만 비교가 가능하다.
ex) int == char, boolean = boolean은 가능 / int == boolean은 불가능
참조 자료형은 그 주소 값이 같은지 확인한다.
< > <= >=
두 개의 값이 큰지 작은지를 비교하는 대소 비교 연산자로 Relational Operator라고 부른다.
값을 비교하기 때문에 숫자에서만 사용할 수 있다.
논리연산자들을 알아보자
논리 연산자 (Conditional Operator)
- && : AND 결합 (Conditional AND), 두 개의 조건이 모두 true일 때만 true
- || : OR 결합 (Conditional OR), 두 조건 중 하나라도 true이면 true
||(OR)의 경우 앞 조건이 true이면 뒤 조건을 확인하지 않기 때문에 이 점을 주의해야 한다.
int x = 1;
if ( x == 1 || ++x == 2) {
System.out.println(x);
}
위 코드는 x==1이 true이므로 조건문 안의 System.out.println(x);를 바로 수행해 증가 연산자가 적용되지 않은 x의 값인 1이 출력된다.
아주 특이한 ? : 연산자
if 조건문을 간단하게 처리해주는 ? : 로 구성되어 있는 삼항 연산자라는 게 있다. 영어로는 그냥 Conditional Operator ? : 라고 한다.
변수 = (boolean조건식) ? true일 때 값 : false일 때 값;
특이한 연산자로는 instanceof라는 것도 있는데 기호가 아닌 자바의 예악어로 되어 있는 유일한 연산자이다.
기본 자료형의 형 변환을 이용한 변신
형변환은 영어로 Casting이라고 하고, 서로 다른 타입 사이에 변환하는 작업을 하는 것을 의미한다.
기본 자료형과 참조 자료형 모두 괄호로 묶어주면 형 변환이 된다.
기본 자료형 중에 boolean은 형 변환이 되지 않는다. 그리고 기본 자료형과 참조 자료형은 서로 형변환할 수 없다.
기본 자료형을 형 변환할 때는 자료형의 크기가 매우 중요하다.
- 작은 타입 -> 큰 타입으로 형변환할 때는 별도로 해줄 것이 없지만,
- 큰 타입 -> 작은 타입으로 형변환할 때는 소괄호 안에 작은 타입을 명시해주고, 값이 변할 수 있으므로 주의해야 한다.
타입 별 사용 가능한 연산자 알아보기
정수형
구분 | 연산자 | |
결과가 boolean인 경우 | 숫자 비교 연산자 | < > <= >= |
숫자 동등 연산자 | == != | |
결과가 int나 long인 경우 | 기본 사칙 연산자 | + - * / % |
증감 연산자 | ++ -- | |
비트 연산자 | & | ^ ~ << >> >>> | |
기타 연산자 | 삼항 연산자 | ? : |
형 변환 연산자 | (타입) | |
문자열 더하기 연산자 | + |
소수형
구분 | 연산자 | |
결과가 boolean인 경우 | 숫자 비교 연산자 | < > <= >= |
숫자 동등 연산자 | == != | |
결과가 int나 long인 경우 | 기본 사칙 연산자 | + - * / % |
증감 연산자 | ++ -- | |
기타 연산자 | 삼항 연산자 | ? : |
형 변환 연산자 | (타입) | |
문자열 더하기 연산자 | + |
booelan 타입
구분 | 연산자 |
동등 연산자 | == != |
조건적 논리 연산자 | && || |
논리 연산자 | ! & | ^ |
삼항 연산자 | ? : |
문자열 더하기 연산자 | + |
조건적 논리 연산자가 아닌 논리 연산자들은 숫자에 사용하면 비트 연산을, boolean에 사용하면 논리 연산을 수행한다.
연산자 | 내용 |
& | 두 값이 모두 true일 때만 true |
| | 두 값이 모두 false일 때만 false |
^ | 두 값이 서로 다를 경우 true, 같은 경우 false |
&&의 경우 좌측의 연산이 false이면 우측을 실행하지 않고, ||의 경우 좌측의 연산이 true이면 우측 연산을 수행하지 않는다.
반면에 &와 |의 경우는 좌측 연산 결과와 우측 연산 결과를 비교해야 하기 때문에 모두 수행한다.
정리해 봅시다
1. 값을 할당할 때 사용하는 연산자의 기호는?
= (대입 연산자)
2. 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 계산할 때 사용하는 연산자의 기호는?
+ - * / %
3. +=는 무엇을 할 때 사용하는 연산자인가요?
왼쪽에 있는 변수에 오른쪽 항의 값을 더할 때 사용한다.
4. 여러분들이 연산의 순서를 모르거나 확실히 하고 싶을 때에는 어떤 기호를 사용해야 하나요?
소괄호
5. ==와 !=의 차이는 무엇인가요?
==은 두 값이 같은지 확인하는 거고, !=은 두 값이 다른지 확인하는 연산자이다.
6. <와 <=의 차이는 무엇인가요?
<은 왼쪽 값이 오른쪽 값보다 더 작은 지 확인하는 연산자고, <=은 왼쪽 값이 오른쪽 값보다 작거나 같은지 확인하는 연산자이다.
7. !연산자는 어떤 타입에 사용할 수 있나요?
boolean
8. ? :로 표시하는 삼항 연산자의 ?와 :뒤에 명시해주는 값은 무엇을 의미하나요?
? 뒤에는 조건문이 true일 때의 값을 의미하고, : 뒤에는 조건문이 false일 때의 값을 의미한다.
9. 자바는 형 변환을 한다고 했는데, short의 값을 long에 할당할 때는 어떤 것을 해주어야 하나요?
long이 더 큰 자료형이므로 아무것도 해주지 않아도 된다.
10. 반대로 long 값을 short에 할당할 때에는 어떤 것을 해주어야 하나요?
short에 비해 큰 자료형인 long의 값을 short에 할당하는 것이므로 형변환을 위해 소괄호 안에 short를 써줘야 한다.
11. 9와 10번의 경우 중 어떤 경우가 기존 값이 사라지고, 엉뚱한 값으로 바뀔 수 있나요?
10번
'도서 > 자바의 신' 카테고리의 다른 글
[도서/자바의 신] #7 여러 데이터를 하나에 넣을 수는 없을까요? (1) | 2022.12.21 |
---|---|
[도서/자바의 신] #6 제가 조건을 좀 따져요 (0) | 2022.12.20 |
[도서/자바의 신] #4 정보를 어디에 넣고 싶은데 (0) | 2022.12.20 |
[도서/자바의 신] #3 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (1) | 2022.12.20 |
[도서/자바의 신] #2 Hello God Of Java (0) | 2022.12.18 |