⏰ 2024.10.14 (D+3)
🔖 중요]
- 연산자 : 연산을 수행하는 기호
- 피연산자 : 연산자가 연산을 수행하기 위한 연산의 대상
예시 📖]
x + 3'+' 는 두 피연산자를 더해서 그 결과를 반환하는 덧셈 연산자이고,
변수 x와 상수 3은 이 연산자의 피연자이다.
❗ 참고사항
- 식 : 연산자와 피연사자를 조합하여 계산하고자 하는 바를 표현한 것
- 식을 평가 : 식을 계산하여 결과를 얻는 것
| 종류 | 연산자 | 설명 |
|---|---|---|
| 산술 연산자 | +, -, *, /, %, '<<', '>>' | 사칙 연산과 나머지 연산(%) |
| 비교 연산자 | >, <, >=, <=, ==, != | 크고 작음과 같고 다름을 비교 |
| 논리 연산자 | &&, ||, !, &, |, ^, ~ | '그리고(AND)와 또는(OR)'으로 조건을 연결 |
| 대입 연산자 | = | 우변의 값을 좌변에 저장 |
| 기타 | (type) ? : instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
예시 📖]
-3 -5
왼쪽의 것은 '부호 연산자'이고, 오른쪽의 것은 '뺄셈 연산자'
'부호 연산자'는 단항 연산자로 피연산자가 '3' 1개 이며,
'뺄셈 연산자'는 이항 연산자로 피연산자가 '-3', '5' 2개❗연산자를 기능별, 피연산자의 개수별로 나누어 분류한 것은 연산자의 우선순위 때문
- 식에 사용된 연산자가 둘 이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정
- 곱셈과 나눗셈(*, /)은 덧셈과 뺄셈(+, -)보다 우선순위 ↑
| 식 | 설명 |
|---|---|
| -x + 3 | 단항 연산자가 이항 연산자보다 우선순위 ↑ x의 부호를 바꾼 다음 덧셈이 수행 |
| -x + 3 * y | 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위 ↑ 그래서 3 * y가 먼저 계산 |
| x + 3 > y - 2 | 비교 연산자(>)보다 산술 연산자 '+'와 '-'가 먼저 수행 그래서 x + 3과 y - 2가 먼저 계산된 다음에 '>'가 수행 |
| x > 3 && x < 5 | 논리 연산자 '&&'보다 비교 연산자가 먼저 수행 그래서 'x > 3'와 'x < 5'가 먼저 계산된 다음에 '&&'가 수행된다. 식의 의미는 'x'가 3보다 크고 5보다 작다'이다. |
| result = x + y * 3; | 대임 연산자는 연산자 중에서 제일 우선순위 ↓ 그래서 우변의 최종 연산 결과가 변수 result에 저장 |
🔖 중요]
> 💡 참고사항]
1. 산술 > 비교 > 논리 > 대입.
: 대입은 제일 마지막에 수행된다.
2. 단항(1) > 이항(2) > 삼항(3).
: 단항 연산자의 우선순위가 이항 연산자보다 높다.
3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽 → 오른쪽
🔖 중요]
- 증감 연산자는 피연산자에 저장된 값을 1증가 또는 감소
- 증감 연산자의 피연산자로 정수와 실수 모두 가능하지만 상수는 값을 변경할 수 없으므로 가능 X
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.
➕➕ 증가 연산자, ➖➖ 감소 연산자
- 증가 연산자 '+'와 감소 연산자 '--'는 양쪽 모두 가능
- 피연산자의 왼쪽에 위치하면 전위형(prefix), 오른족에 위치하면 후위형(postfix)
| 타입 | 설명 | 사용예 |
|---|---|---|
| 전위형 | 값이 참조되기 전에 증가 | j = ++i; |
| 후위형 | 값이 참조된 후에 증가 | j = i++; |
🔖 중요]
- 부호 연산자 '-' 는 피연산자의 부호를 반대로 변경한 결과를 반환
- 피연산자가 음수면 양수, 양수면 음수가 연산의 결과로 처리
- 부호 연산자는 boolean형과 char형을 제외한 기본형에만 사용 가능
📖 예제]
class Ex3-4{
public static void main(String args[]){
-
int i = -10;
i = +i;
System.out.println(i) //실행결과 : -10i = -10;
i = -i;
System.out.println(i) //실행결과 : 10
🔖 중요]
- 형변환 : 변수나 리터럴의 타입을 다른 타입으로 반환하는 것
- 형변환 하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주기
- 괄호 () 는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅(casting) 이라고 함
형변환이란? 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
| 변환 | 수식 | 결과 |
|---|---|---|
| int → char | (char)65 | 'A' |
| char → int | (int)'A' | 65 |
| float → int | (float)1.6f | 1 |
| int → float | (float)10 | 10.0f |
🔖 중요]
- 서로 다른 타입 간의 대입이나 연산을 할 때, 먼저 형변환으로 타입으로 일치시키는 것이 원칙
- 편의상의 이유로 형변환을 생략 가능, 컴파일러가 생략된 형변환을 자동적으로 추가
💡 주의사항]
byte b = 1000; //에러, byte타입의 범위(-128~127)를 벗어난 값의 대입
❗변수가 저장할 수 있는 값의 버위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생
⭐형변환을 하는 이유
"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."
💡 참고사항]
- 곱셈(*), 나눗셈(/), 나머지(%) 연산자가 덧셈(+), 뺄셈(-) 연산자보다 우선순위가 높음으로 먼저 처리
- 나누기의 연산자의 두 피연산자가 모두 int타입의 경우, 연산결과 역시 int타입
- int타입은 소수점을 저장하지 못하므로 정수만 남고 소수점 이하는 버려지기 때문
- 올바른 결과를 얻기 위해서는 두 피연산자 중 어느 한쪽을 실수형으로 형변환하여 결과 추출
- int타입보다 범위가 넒은 float타입으로 일치시킨 후에 연산을 수행하며 float타입과 float타입의 연산 결과 역시 float타입
🔖 중요]
- 산술변환(일반 산술 변환) : 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것
두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
📖 예시]
- long + int → long + long → long
- float + int → float + float → float
- double + float → double + double → double
피연산자의 타입dl int보다 작은 타입이면 int로 변환된다.
📖 예시]
- byte + short → int + int → int
- char + short → int + int → int
🔖 중요]
- 나머지 연산자 : 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환
- 나누는 수(오른쪽 피연산자)로 0을 사용할 수 없고, 피연산자로 정수와 실수를 허용
- 나머지 연산자(%)는 나누는 수로 음수도 허용하며, 부호는 무시되므로 결과는 음수의 절대값으로 나눈 나머지와 같다
📖 예제]
class Ex3-13{
public static void main(String args[]){
System.out.println(-10%8); //실행결과 : -2
System.out.println(10%-8); //실행결과 : 2
System.out.println(-10%-8); //실행결과 : -2
🔖 중요]
- 비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자
- 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true와 false로 출력
⭐ 대소비교 연산자 < > <= >=
- 두 피연산자의 값의 크기를 비교하는 연산자
- 참이면 true를 거짓이면 false를 결과로 반환
- 기본형 중에서는 boolean을 제외한 나머지 자료형에 사용 가능
- 단, 참조형에서는 대소비교 연산자를 사용할 수 없다
비교연산자 연산결과 > 좌변 값이 크면, true 아니면 false < 좌변 값이 작으면, true 아니면 false >= 좌변 값이 크거나 같으면, true 아니면 false <= 좌변 값이 작거나 같으면, true 아니면 false
⭐ 등가비교 연산자 == !=
- 두 피연산자의 값이 같은지 또는 다른지 비교하는 연산자
- 기본형의 경우, 변수에 저장되어 있는 값이 같은지 확인 가능
- 참조형의 경우, 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지(주소값이 같은지) 확인 가능
비교연산자 연산결과 == 두 값이 같으면, true 아니면 false != 두 값이 다르면, true 아니면 false
🔖 중요]
- 두 문자열을 비교할 때는 비교 연산자 '=='대신 equals()라는 메서드를 사용
- 문자열의 내용이 같은지 비교하기 위해서는 equals()를 사용
- equals()는 비교하는 두 문자열이 같으면 true를 다르면 false를 반환
📖 예제]
String str = new String("abc");
// equals()는 두 문자열의 내용이 같으면 true, 다르면 false를 결과로 반환boolean result = str.equals("abc");
// 내용이 같으므로 result에 true가 저장
🔖 중요]
- 논리 연산자는 둘 이상의 조건을 '그리고(AND)' 나 '또는(OR)'으로 연결하여 하나의 식으로 표현
- 논리 연산자 && '그리고(AND)' : 두 피연산자가 모두 true일 때만 true를 결과 추출
- 논리 연산자 || '또는(OR)' : 두 피연산자 중 어느 한 쪽만 true이어도 true를 결과를 추출
- 논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용
💡 참고사항]
|| (OR결합) : 피연산자 중 어느 한 쪽이 true이면 true를 결과로 얻는다.
&& (AND결합) : 피연산자 중 양쪽 모두 true이어야 true를 결과로 얻는다.
| X | Y | X || Y | X && Y |
|---|---|---|---|
| true | true | true | true |
| true | false | true | false |
| false | true | true | false |
| false | false | false | false |
🔖 중요]
- 피연산자가 true이면 false를 false면 true를 결과로 반환
- 즉, true와 false를 반대로 바꾸는 것
- 논리 부정 연산자 '!'가 주로 사용되는 곳은 조건문과 반복문의 조건식
| X | Y |
|---|---|
| true | false |
| false | true |
🔖 중요]
- 조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자
- 삼항 연산자는 조건 연산자 하나뿐이다.
- 조건 연산자는 조건문인 if문으로 바꿔서 쓸 수 있다.
📖 예제]
result = (x > y) ? x : y;❗ if문으로 바꿔서 작성을 하는 경우,
if(x > y)
result = x; // x > y가 true일 때
else
result = y; // x > y가 false일 때
🔖 중요]
- 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용
- 오른쪽 피연산자의 값(식이라면 평가값)을 왼쪽 피연산자에 저장
- 대입 연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 있기 때문에 식에서 제일 나중에 수행
📖 예제]
System.out.println(x = 3); // 변수 x에 3이 저장되고
→ System.out.println(3); // 연산결과인 3이 출력된다.
💡 참고사항]
Ivalue : 대입 연산자의 왼쪽 피연산자
rvalue : 대입 연산자의 오른쪽 피연산자- 대입 연산자의 rvalue는 변수뿐만 아니라 식이나 상수 등이 모두 가능
- Ivalue는 반드시 변수처럼 값을 변경할 수 있는 것
- 리터럴이나 상수값이 값을 저장할 수 없는 것들은 Ivalue가 될 수 없다.
- 변수 앞에 키워드 'final'을 붙이면 상수이며, 상수는 한번 저장된 값은 바꿀 수 없다.