1. 항과 연산자
연산에 사용하는 기호를 연산자(operator)라고 부른다.
우리가 수학 시간에 배운 사칙연산의 기호들이 연산자이다.그리고 이 연산에 사용하는 값을 항(operand)이라고 한다.'3+4'에서 '3'과 '4'는 항, '+'는 연산자인 것이다.
연산자는 항의 개수에 따라 단항 연산자, 이항 연산자, 삼항 연산자로 나눌 수 있다.그 중에서 프로그램을 사용하는 조건 연산자가 있는데, 삼항 연산자가 바로 그것이다.
연산자 | 설명 | 연산 예 |
단항 연산자 | 항이 한 개인 연산자 | ++num |
이항 연산자 | 항이 두 개인 연산자 | num1 + num2 |
삼항 연산자 | 항이 세 개인 연산자 | (5 > 3) ? 1 : 0; |
우리가 사칙 연산을 할 때 곱셈과 나눗셈을 먼저 계산하듯 연산 순서에도 우선순위가 있다.
이를 '연산자 우선순위'라고 한다.
단항 연산자가 가장 높고 이항, 삼항의 순서를 갖고 있다.
이제 각 연산자를 자세히 살펴봐보자!
2. 대입 연산자
대입 연산자(assignment operator)는 말 그대로 변수에 값을 대입하는 연산자다.
그리고 대입 연산자는 이항 연산자 중 우선순위가 가장 낮은 연산자이다.
즉 하나의 문장에 여러 연산자가 있을 때 모든 연산을 끝낸 후 마지막에 연산 결과를 변수에 대입하는 것이다.
예 : 왼쪽 변수 = 오른쪽 변수(또는 식)
* 대입 연산자를 기준으로 왼쪽 변수는 항상 오른쪽 변수의 값을 가져와 대입한 값을 나타낸다. 따라서 왼쪽 변수는 항상 변수나 상수가 와야 한다.
3. 부호 연산자
부호 연산자는 +와 - 두 가지가 있다.
이는 더하기와 빼기를 나타내는 이항 연산자이면서도 부호를 나타내는 단항 연산자로도 사용이 가능하다.
그런데 변수에 - 연산자만 사용한다고 해서 값 자체가 음수로 바뀌는 것은 아니다.
다음의 예제를 살펴보자
int num = 10;
System.out.println(+num); // 값 10이 그대로 출력됨
System.out.println(-num); // 값 10에 -가 붙어서 -10이 출력되지만 num 값이 실제로 바뀌지는 않음
System.out.println(num); // 값 10이 그대로 출력됨
num = -num; // num 값을 음수로 바꿔서 다시 num에 대입함
System.out.println(num); // 값 -10이 출력됨
4. 산술 연산자
사칙 연산에서 사용하는 연산자가 산술 연사자이다.
프로그램에서 산술 연산자는 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지(나눈 후 나머지의 값) 이렇게 다섯 가지가 있다.
연산자 | 연산 예 |
+ | 5+3 |
- | 5-3 |
* | 5*3 |
/ | 5/3 |
% | 5%3 |
산술 연산자의 우선순위는 일반 수학의 산술 연산과 같다.
나머지를 구하는 % 연산자는 곱셈과 나눗셈의 우선순위와 동일하다.
다음은 산술 연산자를 사용하여 수학 점수와 영어 점수, 국어 점수의 총점과 평균을 구하는 예제이다.
package operator;
public class OperationEx1 {
public static void main(String[] args) {
int mathScore = 90;
int engScore = 70;
int korScore = 100;
int totalScore = mathScore + engScore + korScore;
System.out.println(totalScore);
double avgScore = totalScore / 3.0;
System.out.println(avgScore);
}
}
5. 증가,감소 연산자
증가, 감소 연산자는 단항 연산자이다.
연산자 앞이나 뒤에 사용하며 값을 1만큼 늘리거나 1만큼 줄인다.
이 증가, 감소 연산자는 자주 사용하는 연산자이므로 잘 익혀 두어야 한다.
연산자 | 기능 | 연산 예 | |||||
++ | 항의 값에 1을 더한다. | val = ++num; // 먼저 num의 값이 1 증가한 후 val 변수에 대입 val = num++; // val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 증가 |
|||||
__ | 항의 값에 1을 뺀다. | val = --num; // 먼저 num의 값이 1 감소한 후 val 변수에 대입 val = num--; // val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소 |
6. 관계 연산자
관계 연산자는 항이 두 개인 이항 연산자이다.
두 개의 항 중 어느 것이 더 큰지, 작은지, 같은 지 등의 여부를 검사한다.
수학 시간에 배운 부등호가 이 연산자에 해당한다.
관계 연산자의 결과 값은 참(true) 또는 거짓(false)으로 반환된다.
연산자 | 기능 | 연산 예 | ||
> | 왼쪽 항이 크면 참을, 아니면 거짓을 반환한다. | num > 3; | ||
< | 왼쪽 항이 작으면 참을, 아니면 거짓을 반환한다. | num < 3; | ||
>= | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참을, 아니면 거짓을 반환한다. | num >= 3; | ||
<= | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참을, 아니면 거짓을 반환한다. | num <= 3; | ||
== | 두 개의 항의 값이 같으면 참, 아니면 거짓을 반환한다. | num == 3; | ||
!= | 두 개 항이 다르면 참, 아니면 거짓을 반환한다. | num != 3; |
7. 논리 연산자
논리 연산자는 중등 수학의 명제를 생각하면 된다.
두 명제가 모두 참이면 논리 곱은 참이고, 두 명제 중 하나만 참이면 논리 합은 참이다.
참의 부정은 거짓, 거짓의 부정은 참이다.
이러한 논리 연산을 프로그래밍 언어로 구현한 연산자가 논리 연산자이다.
논리 연산자는 주로 관계 연산자와 함께 사용한다.
관계 연산자가 논리 연산자보다 높으므로 관계 연산자의 결과 값을 기반으로 논리 연산자의 결과 값을 계산한다.
연산자 | 기능 | 연산 예 | ||
&& (논리 곱) |
두 항이 모두 참인 경우에만 결과 값이 참 그렇지 않은 경우에는 거짓 |
boolean val = (5 > 3) && (5 > 2); |
||
|| (논리 합) |
두 항 중 한 항만 참인 경우에만 결과 값이 참 두 항 모두 거짓이면 결과 값은 거짓 |
boolean val = (5 > 3) || (5 < 2); |
||
! (부정) |
단항 연산자이다. 참인 경우에는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꾼다. |
boolean val = !(5 > 3); |
* 논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가(Short Circuit Evaluation; SCE)
package operator;
public class OperationEx3 {
public static void main(String[] args) {
int num1 = 10;
int i = 2;
boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
System.out.println(value); // false
System.out.println(num1); // 20
System.out.println(i); // 2
value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
System.out.println(value); // true
System.out.println(num1); // 30
System.out.println(i); // 2
}
}
단락 회로 평가란 논리 곱 연산과 논리 합 연산을 할 때 두 항을 모두 실행하지 않더라도 결과 값을 알 수 있는 경우에 나머지 항은 실행되지 않는 것을 말한다.
따라서 프로그램을 만들면서 예상한 실행 결과와 다를 수 있으므로 주의해야한다.
8. 복합 대입 연산자
복합 대입 연산자란 대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자이다.
산술 연산자, 비트 연산자와 함께 사용하여 코드를 간결하게 표현할 수 있다.
대입 연산자는 우선순위가 가장 낮은 연산자이기에 연산이 모두 끝난 후 마지막으로 결과 값을 대입한다.
복합 대입 연산자는 특히 산술 연산자와 함께 자주 사용하므로 잘 이해해두면 좋다.
연산자 | 기능 | 연산 예 | ||
+= | 두 항의 값을 더해서 왼쪽 항에 대입한다. | num1 += 2; | ||
-= | 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입한다. | num1 -= 2; | ||
*= | 두 항의 값을 곱해서 왼쪽 항에 대입한다. | num1 *= 2; | ||
/= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. | num1 /= 2; | ||
%= | 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다. | num1 %= 2; | ||
<<= | 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. | num1 <<= 2; | ||
>>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. (왼쪽에 채워지는 비트 값은 부호 비트와 동일하다) |
num1 >>= 2; | ||
>>>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. (왼쪽에 채워지는 비트 값은 0이다) |
num1>>>= 2; | ||
&= | 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입한다. | num1 &= 2; | ||
|= | 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입한다. | num1 |= 2; | ||
^= | 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입한다. | num1 ^= 2; |
9. 조건 연산자
조건 연산자는 연산에 필요한 항의 개수가 세 개이다.
그래서 삼항 연산자라고 한다.
연산자는 [ 조건식 ? 결과1 : 결과2 ; ] 이다.
10이 짝수인지 확인하는 방법은 아래와 같다.
int num = 10;
boolean isEven;
isEven = (num % 2) ? true : false;
System.out.println(isEven); // true가 출력
'⁂ Java > : 독학으로 공부하기(과거)' 카테고리의 다른 글
[java] #3-1 조건문 : 제어 흐름 이해하기 (0) | 2022.07.01 |
---|---|
[java] #2-2 비트 연산자 (0) | 2022.07.01 |
[java] #1-3 상수와 리터럴 (0) | 2022.06.30 |
[java] #1-2 변수와 자료형 (0) | 2022.06.29 |
[java] #1-1 그래서 자바가 뭔데? (2) | 2022.06.29 |