JAVA 연산자

YeHee·2024년 10월 22일

⏰ 2024.10.14 (D+3)

1. 연산자와 피연산자

🔖 중요]

- 연산자 : 연산을 수행하는 기호
- 피연산자 : 연산자가 연산을 수행하기 위한 연산의 대상

예시 📖]
x + 3

'+' 는 두 피연산자를 더해서 그 결과를 반환하는 덧셈 연산자이고,
변수 x와 상수 3은 이 연산자의 피연자이다.

❗ 참고사항
- 식 : 연산자와 피연사자를 조합하여 계산하고자 하는 바를 표현한 것
- 식을 평가 : 식을 계산하여 결과를 얻는 것

2. 연산자의 종류

종류 연산자 설명
산술 연산자 +, -, *, /, %, '<<', '>>' 사칙 연산과 나머지 연산(%)
비교 연산자 >, <, >=, <=, ==, != 크고 작음과 같고 다름을 비교
논리 연산자 &&, ||, !, &, |, ^, ~ '그리고(AND)와 또는(OR)'으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ? : instanceof 형변환 연산자, 삼항 연산자, instanceof 연산자

예시 📖]
-3 -5
왼쪽의 것은 '부호 연산자'이고, 오른쪽의 것은 '뺄셈 연산자'
'부호 연산자'는 단항 연산자로 피연산자가 '3' 1개 이며,
'뺄셈 연산자'는 이항 연산자로 피연산자가 '-3', '5' 2개

❗연산자를 기능별, 피연산자의 개수별로 나누어 분류한 것은 연산자의 우선순위 때문

3. 연산자의 우선순위

- 식에 사용된 연산자가 둘 이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정
- 곱셈과 나눗셈(*, /)은 덧셈과 뺄셈(+, -)보다 우선순위 ↑

설명
-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에 저장

4. 연산자의 결합규칙

🔖 중요]

  • 연산자의 결합규칙 : 하나의 식에 같은 우선순위의 연산자들이 여러 개 있는 경우, 규칙을 가지고 처리를 하는 것
  • 덧셈 연산자 '+'의 결합방향이 왼쪽에서 오른쪽으로 수행되어 처리
  • 대입 연산자 '='의 결합방향이 오른쪽에서 왼쪽으로 수행되어 우변의 값을 좌변에 저장하고, 저장된 값을 연산결과로 반환

> 💡 참고사항]
1. 산술 > 비교 > 논리 > 대입.
: 대입은 제일 마지막에 수행된다.
2. 단항(1) > 이항(2) > 삼항(3).
: 단항 연산자의 우선순위가 이항 연산자보다 높다.
3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽 → 오른쪽

5. 증감 연산자 ++ 과 --

🔖 중요]

- 증감 연산자는 피연산자에 저장된 값을 1증가 또는 감소
- 증감 연산자의 피연산자로 정수와 실수 모두 가능하지만 상수는 값을 변경할 수 없으므로 가능 X

증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.

➕➕ 증가 연산자, ➖➖ 감소 연산자
- 증가 연산자 '+'와 감소 연산자 '--'는 양쪽 모두 가능
- 피연산자의 왼쪽에 위치하면 전위형(prefix), 오른족에 위치하면 후위형(postfix)

타입 설명 사용예
전위형 값이 참조되기 전에 증가 j = ++i;
후위형 값이 참조된 후에 증가 j = i++;

6. 부호 연산자

🔖 중요]

- 부호 연산자 '-' 는 피연산자의 부호를 반대로 변경한 결과를 반환
- 피연산자가 음수면 양수, 양수면 음수가 연산의 결과로 처리
- 부호 연산자는 boolean형과 char형을 제외한 기본형에만 사용 가능

📖 예제]
class Ex3-4{
public static void main(String args[]){
-
int i = -10;
i = +i;
System.out.println(i) //실행결과 : -10

i = -10;
i = -i;
System.out.println(i) //실행결과 : 10

7. 형변환 연산자

🔖 중요]

- 형변환 : 변수나 리터럴의 타입을 다른 타입으로 반환하는 것
- 형변환 하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주기
- 괄호 () 는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅(casting) 이라고 함

형변환이란? 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

변환 수식 결과
int → char (char)65 'A'
char → int (int)'A' 65
float → int (float)1.6f 1
int → float (float)10 10.0f

8. 자동 형변환

🔖 중요]

- 서로 다른 타입 간의 대입이나 연산을 할 때, 먼저 형변환으로 타입으로 일치시키는 것이 원칙
- 편의상의 이유로 형변환을 생략 가능, 컴파일러가 생략된 형변환을 자동적으로 추가

💡 주의사항]

byte b = 1000; //에러, byte타입의 범위(-128~127)를 벗어난 값의 대입

❗변수가 저장할 수 있는 값의 버위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생

⭐형변환을 하는 이유

"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."

9. 사칙 연산자

💡 참고사항]

- 곱셈(*), 나눗셈(/), 나머지(%) 연산자가 덧셈(+), 뺄셈(-) 연산자보다 우선순위가 높음으로 먼저 처리
- 나누기의 연산자의 두 피연산자가 모두 int타입의 경우, 연산결과 역시 int타입
- int타입은 소수점을 저장하지 못하므로 정수만 남고 소수점 이하는 버려지기 때문
- 올바른 결과를 얻기 위해서는 두 피연산자 중 어느 한쪽을 실수형으로 형변환하여 결과 추출
- int타입보다 범위가 넒은 float타입으로 일치시킨 후에 연산을 수행하며 float타입과 float타입의 연산 결과 역시 float타입

10. 산술 변환

🔖 중요]
- 산술변환(일반 산술 변환) : 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것

  1. 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)

    📖 예시]
    - long + int → long + long → long
    - float + int → float + float → float
    - double + float → double + double → double

  2. 피연산자의 타입dl int보다 작은 타입이면 int로 변환된다.

    📖 예시]
    - byte + short → int + int → int
    - char + short → int + int → int

11. 나머지 연산자

🔖 중요]
- 나머지 연산자 : 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환
- 나누는 수(오른쪽 피연산자)로 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

12. 비교 연산자

🔖 중요]
- 비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자
- 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true와 false로 출력

⭐ 대소비교 연산자 < > <= >=
- 두 피연산자의 값의 크기를 비교하는 연산자
- 참이면 true를 거짓이면 false를 결과로 반환
- 기본형 중에서는 boolean을 제외한 나머지 자료형에 사용 가능
- 단, 참조형에서는 대소비교 연산자를 사용할 수 없다

비교연산자 연산결과
> 좌변 값이 크면, true 아니면 false
< 좌변 값이 작으면, true 아니면 false
>= 좌변 값이 크거나 같으면, true 아니면 false
<= 좌변 값이 작거나 같으면, true 아니면 false

⭐ 등가비교 연산자 == !=
- 두 피연산자의 값이 같은지 또는 다른지 비교하는 연산자
- 기본형의 경우, 변수에 저장되어 있는 값이 같은지 확인 가능
- 참조형의 경우, 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지(주소값이 같은지) 확인 가능

비교연산자 연산결과
== 두 값이 같으면, true 아니면 false
!= 두 값이 다르면, true 아니면 false

13. 문자열의 비교

🔖 중요]
- 두 문자열을 비교할 때는 비교 연산자 '=='대신 equals()라는 메서드를 사용
- 문자열의 내용이 같은지 비교하기 위해서는 equals()를 사용
- equals()는 비교하는 두 문자열이 같으면 true를 다르면 false를 반환

📖 예제]
String str = new String("abc");
// equals()는 두 문자열의 내용이 같으면 true, 다르면 false를 결과로 반환

boolean result = str.equals("abc");
// 내용이 같으므로 result에 true가 저장

14. 논리 연산자 && ||

🔖 중요]
- 논리 연산자는 둘 이상의 조건을 '그리고(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

15. 논리 부정 연산자 !

🔖 중요]
- 피연산자가 true이면 false를 false면 true를 결과로 반환
- 즉, true와 false를 반대로 바꾸는 것
- 논리 부정 연산자 '!'가 주로 사용되는 곳은 조건문과 반복문의 조건식

X Y
true false
false true

16. 조건 연산자

🔖 중요]
- 조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자
- 삼항 연산자는 조건 연산자 하나뿐이다.
- 조건 연산자는 조건문인 if문으로 바꿔서 쓸 수 있다.

📖 예제]
result = (x > y) ? x : y;

❗ if문으로 바꿔서 작성을 하는 경우,
if(x > y)
result = x; // x > y가 true일 때
else
result = y; // x > y가 false일 때

17. 대입 연산자

🔖 중요]
- 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용
- 오른쪽 피연산자의 값(식이라면 평가값)을 왼쪽 피연산자에 저장
- 대입 연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 있기 때문에 식에서 제일 나중에 수행

📖 예제]
System.out.println(x = 3); // 변수 x에 3이 저장되고
→ System.out.println(3); // 연산결과인 3이 출력된다.

💡 참고사항]
Ivalue : 대입 연산자의 왼쪽 피연산자
rvalue : 대입 연산자의 오른쪽 피연산자

- 대입 연산자의 rvalue는 변수뿐만 아니라 식이나 상수 등이 모두 가능
- Ivalue는 반드시 변수처럼 값을 변경할 수 있는 것
- 리터럴이나 상수값이 값을 저장할 수 없는 것들은 Ivalue가 될 수 없다.
- 변수 앞에 키워드 'final'을 붙이면 상수이며, 상수는 한번 저장된 값은 바꿀 수 없다.

0개의 댓글