1. 연산자
연산자는 연산을 수행하는 기호를 의미한다. 흔히 사칙연산(+, - *, /)을 비롯해 다양한 연산자들이 있다.
1.1 연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | +, -, *, /, %, <<, >> | 사칙연산과 나머지 연산(%) |
비교 연산자 | >, <, >=, <=, ==, != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | &&, ||, !, &, |, ^, ~ | 그리고(AND)와 또는(OR)으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장(대입) |
기타 | (type), ?:, instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
1.2 연산자의 우선순위
1) 산술 > 비교 > 논리 > 대입 연산자 순으로 대입은 제일 마지막에 수행된다.
2) 단항(1) > 이항(2), 삼항(3) 연산자 순으로 단항 연산자의 우선순위가 이항 연산자보다 높다.
3) 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
종류 | 결합규칙(진행방향) | 연산자 | 우선순위 |
단항 연산자 | ← | ++, --, +, -, ~, !, (type) | 높음 낮음 |
산술 연산자 | → | *, /, % | |
→ | +, - | ||
→ | <<, >> | ||
비교 연산자 | → | <, >, <=, >=, instanceof | |
→ | ==, != | ||
논리 연산자 | → | & | |
→ | ^ | ||
→ | | | ||
→ | &&(AND) | ||
→ | ||(OR) | ||
삼항 연산자 | → | ?: | |
대입 연산자 | ← | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= |
2. 단항 연산자
단항 연산자에서는 대표적으로 증감 연산자와 부호 연산자 두 가지 연산자 종류가 있다.
2.1 증감 연산자
종류: ++, --
증가 연산자(++): 피연산자의 값을 1 증가시킨다.
감소 연산자(--): 피연산자의 값을 1 감소시킨다.
증감 연산자는 두 가지 타입이 있다.
타입 | 설명 | 사용 방법의 예시 |
전위형 | 값이 참조되기 전에 증가 | i = j++; // i의 값을 1증가시킨다. |
후위형 | 값이 참조된 후에 증가 | i = ++j; // 위 문장과 차이가 없다. |
즉, 전위형은 증가후에 참조하여 대입하는 형태이고, 후위형은 참조하여 대입한 후에 증가하는 형태다.
2.2 부호 연산자
종류: +, -
부호 연산자는 boolean, char 타입을 제외한 기본형에서만 사용 가능하다. 또한 피연산자의 부호를 반대로 변경한 결과를 반환한다. 피연산자가 음수면 양수, 양수면 음수가 연산의 결과가 된다.
class OperatorEx4{
public static void main(String[] args){
int i = -10;
i = +i;
System.out.println(i);
i = -10;
i = -i;
System.out.println(i);
}
}
----------
[실행결과]
-10
10
3. 산술 연산자
3.1 사칙 연산자(+, -, *, /, %)
더하기, 빼기, 곱하기, 나누기, 나머지 연산자로 분류 되며, 우선순위는 우리가 익히 알고 있는 *, /, %가 더 높다. 특히 타입에 따라 값이 달라질 수 있는데, int형으로 사칙연산을 할 때 주의점은 소수점이 표시되지 않으므로 나눗셈(/) 연산을 하게 되면 소수점 이하의 나머지는 버려진다는 점이다. 또한 피연산자가 정수형일 경우 나누는 수를 0으로 사용할 수 없으며, 만일 0으로 나누면 컴파일은 정상적으로 되지만 실행시 오류(ArithmeticException)가 발생한다.
가능하면 int형보다 작인 범위의 정수형은 int형으로 형변환하여 연산하는 것이 좋고, int형의 범위보다 큰 정수형이면 long타입으로 연산하는 것이 좋다.
정수 & 정수 = 정수
정수 & 실수 = 실수
4. 비교 연산자
비교연산자는 두 피연산자를 비교하는 데 사용되는 연산자다. 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true와 false 둘 중 하나다. 비교 연산자도 연산자이므로 비교하는 피연산자의 타입이 서로 다를 경우에는 자료형의 범위가 큰 쪽으로 자동 형변환하여 피연산자의 타입을 일치시킨 후에 비교한다는 점에 주의해야 한다.
4.1 대소비교 연산자 (<, >, <=, >=)
비교연산자 | 연산결과 |
> | 좌변 값이 크면 true, 작으면 false |
< | 우변 값이 크면 true, 작으면 false |
>= | 좌변 값이 우변 값보다 크거나 같으면 true, 아니면 false |
<= | 좌변 값이 우변 값보다 작거나 같으면 true, 아니면 false |
4.2 등가비교 연산자(==, !=)
두 피연산자의 값이 같은지 다른지 비교하는 연산자로 기본형은 물론 참조형과 같은 모든 자료형에 사용할 수 있다.
비교 연산자 | 연산 결과 |
== | 두 값이 같으면 true, 다르면 false |
!= | 두 값이 다르면 true, 같으면 false |
5. 논리 연산자(&&, ||, !)
논리 연산자는 &&(AND), ||(OR), !(NOT)으로 이루어져 있으며, 논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만 허용한다.
A. || (OR결합) : 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
B. && (AND결합) : 피연산자 양쪽 모두 true여야 true를 결과로 얻는다.
6. 비트 연산자(&, |, ^, ~, <<, >>)
비트 연산자는 피연산자를 비트단위로 논리 연산한다. 피연산자를 이진수로 표현했을 때의 각 자리를 아래 규칙에 따라 연산을 수행하며, 피연산자의 자리에 실수는 허용하지 않는다.
| (OR연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
B. & (AND연산자) : 피연산자 양쪽 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
C. ^ (XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
7. 삼항 연산자
삼항 연산자는 말 그대로 피연산자가 3개 일 때만 사용할 수 있으며 형태는 다음과 같다.
조건식 ? 식1 : 식2
조건식이 참(true)일 경우 식1, 아니면(false) 식2가 되는 형태.
result = (x > y) ? x : y;
→ result = (5 > 3) ? 5 : 3;
→ result = (true) ? 5 : 3; //조건식이 true이므로 연산 결과는 5
→ result = 5;
조건 연산자는 조건문인 if문으로 바꿔 사용할 수 있으며, if문 대신 조건 연산자를 사용하면 코드를 보다 간단하게 작성할 수 있다는 장점이 있다. 위의 조건문을 if문으로 바꾸면 다음과 같다.
if(x > y){
result = x; // x > y가 true일 때
} else {
result = y; // x> y가 false일 때
}
8. 대입 연산자
대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다. 대입 연산자는 무조건 우측 피연산자의 값이 좌측 피연산자에 저장되는 형태로 연산결과를 반환한다.
int x = 3; //정수 3이 int타입의 변수 x에 저장
※주의점
대입 연산자는 왼쪽 피연산자 Left Value(줄여서 Lvalue)와 오른쪽 피연산자Right Value(Rvalue)로 구분되는데, Rvlaue는 변수뿐만 아니라 식이나 상수 등과 같이 모두 가능한 반면, Lvalue는 반드시 변수처럼 값을 변경할 수 있는 것이어야 한다. 그렇기 때문에 리터럴이나 상수와 같이 값을 저장할 수 없는 것들은 Lvalue가 될 수 없다.
8.1 복합 대입 연산자
op= | = |
i += 3; | i = i+3; |
i -= 3; | i = i - 3; |
i *= 3; | i = i * 3; |
i /= 3; | i = i / 3; |
i %= 3; | i = i % 3; |
i <<= 3; | i = i << 3; |
i >>= 3; | i = i >> 3; |
i &= 3; | i = i & 3; |
i ^= 3; | i = i ^ 3; |
i |= 3; | i = i | 3; |
i *= 10 + j; | i = i * (10 + j); |
왼쪽은 복합 연산자를 이용한 사용 예시, 오른쪽은 대입 연산자를 이용한 왼쪽과 동일한 의미의 식.
'Java > Basic' 카테고리의 다른 글
반복문(for, while, do-while) (0) | 2021.02.20 |
---|---|
조건문(if, switch) (0) | 2021.02.19 |
형변환(Casting) (0) | 2021.02.17 |
기본형(primitive type) (0) | 2021.02.16 |
화면 출력과 화면 입력 (0) | 2021.02.14 |
댓글