연산자
항과 연산자
- 연산에 사용하는 기호를 연산자(operator)라고 합니다.
- 연산에 사용하는 값을 항(operand)라고 합니다.
- 연산자는 항의 개수에 따라 단항연산자, 이항연산자, 삼항연산자로 나눌 수 있습니다.
연산자설명연산 예
단항 연산자 | 항이 한 개인 연산자 | ++num |
이항 연산자 | 항이 두 개인 연산자 | num1 + num2; |
삼항 연산자 | 항이 세 개인 연산자 | (5 > 3)?1:0; |
대입 연산자
- 변수에 값을 대입하는 연산자입니다.
- 대입연산자는 이항 연산자 중 우선순위가 가장 낮은 연산자입니다.
- 하나의 문장에 여러 연산자가 있을 때 모든 연산을 다 끝낸 후 마지막에 연산 결과를 변수에 대입하는 것입니다.
왼쪽 변수 = 오른쪽 변수(또는 식)
int age = 25; // 나의를 의미하는 age 변수에 값 24를 대입함
- 오른쪽 변수 값이나 식의 연산 결과를 왼쪽 변수에 대입합니다.
부호 연산자
- 부호연산자는 +, - 두 가지가 있습니다.
- 더하기, 빼기 연산에 쓰는 이항 연산자이면서 부호를 나타내는 단항 연산자로 사용합니다.
연산자기능연산 예
+ | 변수나 상수 값을 양수로 만듭니다. | +3 |
- | 변수나 상수 값을 음수로 만듭니다. | -3 |
int num = 20;
System.out.println(+num); // 값 20이 그대로 출력됨
System.out.println(-num); // 값 20에 -가 붙어서 -20이 출력되지만 num 값이 실제로 바뀌지는 않음.
System.out.println(num); // 값 10이 그대로 출력됨
num = -num; // num 값을 음수로 바꿔서 다시 num으로 대입함
System.out.println(num); // 값 -20이 출력됨
산술 연산자
- 사칙 연산에 사용하는 연산자가 산술 연산자 입니다.
연산자기능연산 예
+ | 두 항을 더합니다. | 5 + 3 |
- | 앞에 있는 항에서 뒤에 있는 항을 뺍니다. | 5 - 3 |
* | 두 항을 곱합니다. | 5 * 3 |
/ | 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다. | 5 / 3 |
% | 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지는 구합니다. | 5 % 3 |
산술 연산자의 우선순위
- 산술 연산자의 우선순위는 일반 수학의 산술연산과 같습니다.
package selfstudy;
public class Tstory11 {
public static void main(String[] args) {
int math = 95;
int eng = 85;
int total = math + eng; // 총점 구하기
System.out.println(total);
double avg = total / 2.0; // 평균 구하기
System.out.println(avg);
}
}
실행결과
180
90.0
증가감소 연산자
- 증가,감소 연산자는 단항 연산자 입니다.
- 연산자 앞이나 뒤에 사용하며 값을 1만큼 늘리거나 1만큼 줄입니다.
연산자기능연산 예
++ | 항의 값에 1을 더합니다. | val = ++num; // 먼저 num에 값이 1 증가한 후 val변수에 대입 val = num++; // val 변수에 기존 num 값을 먼저 대입한 후 값 1 증가 |
-- | 항의 값에서 1을 뺍니다. | val = --num; // 먼저 num값이 1 감소한 후 val 변수에 대입 val = num--; // var 변수에 기존 num 값을 먼저 대입한 후 num값 1 감소 |
int val = 15;
int num = ++val; // num에 16이 대입됨
int value = 10;
int num = value++; // num에 10이 대입됨
관계 연산자
- 항이 두 개인 이행 연산자 입니다.
- 두 개의 항 중 어느 것이 더 큰지, 작은지, 같은지등의 여부를 검사합니다.
- 관계 연산자의 결과 값은 참(true) 또는 거짓(false)로 반환됩니다.
연산자기능연산 예
> | 왼쪽 항이 크면 참을, 아니면 거짓을 반환합니다. | num > 3; |
< | 왼쪽 항이 작으면 참을, 아니면 거짓을 반환합니다. | num < 3; |
>= | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환합니다. | num >= 3; |
<= | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환합니다. | num <= 3; |
== | 두 개의 항의 값이 같으면 참, 아니면 거짓을 반환합니다. | num == 3; |
!= | 두 개의 항이 다르면 참, 아니면 거짓을 반환합니다. | num != 3; |
int age = 25;
boolean val = (age > 20);
System.out.println(val); // true
논리 연산자
- 두 명제가 모두 참이면 논리 곱은 참이고, 두 명제 중 하나만 참이면 논리 합은 참입니다.
- 참의 부정은 거짓, 거짓의 부정은 참입니다.
- 이러한 논리 연산을 프로그래밍 언어로 구현한 연산자가 논리 연산자입니다.
- 논리 연산자는 주로 관계연산자와 함께 사용합니다.
- 관계연산자의 우선순위가 논리연산자보다 높으므로, 관계연산자의 결과 값을 기반으로 논리 연산자의 결과 값을 계산합니다.
연산자기능연산 예
&& (논리 곱) |
두 항이 모두 참인 경우에만 결과 값이 참입니다. 그렇지 않은 경우는 거짓입니다. | boolean val = (5 > 3) && (5 > 2); |
|| (논리 합) |
두 항 중 하나의 항만 참이면 결과 값은 참입니다. 두 항이 모두 거짓이면 결과 값은 거짓입니다. | boolean val = (5 > 3) || (5 > 2); |
! (부정) |
단일 연산자입니다. 참인 경우는 거짓으로 바꾸거, 거짓인 경우는 참으로 바꿉니다. | boolean val = !(5 > 3); |
int num1 = 20;
int num2 = 30;
boolean flag = (num1 > 0) && (num2 > 0);
System.out.println(flag); // flag는 참
flag = (num1 < 0) && (num2 > 0);
System.out.println(flag); // flag는 거짓
flag = (num1 < 0) || (num2 > 0);
System.out.println(flag); // flag는 참
논리연산에서 모든 항이 실행되지 않는 경우 - 단락회로 평가
package selfstudy;
public class Tstory12 {
public static void main(String[] args) {
int num1 = 10;
int i = 2;
// 논리 곱에서 앞 항의 결과 값이 거짓이므로 ((i = i + 2) < 10); 문장은 실행되지 않는다.
boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
System.out.println(value);
System.out.println(num1);
System.out.println(i);
// 논리 합에서 앞 항의 결과 값이 참이므로 ((i = i + 2) < 10);은 실행되지 않음
value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
System.out.println(value);
System.out.println(num1);
System.out.println(i);
}
}
실행결과
false
20
2
true
30
2
복합 대입 연산자
- 복합 대입 연산자란 대입 연산자의 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자입니다.
- 산술연산자, 비트연산자와 함게 사용하여 코드를 간결하게 표현할 수 있습니다.
- 대입 연산자는 우선순위가 가장 낮은 연산자입니다. 연산이 모두 끝난 후 마지막으로 결과 같을 변수에 대입합니다.
- 복합 대입 연산자 역시 연산한 결과 값을 변수에 대입합니다.
- 복합 대입 연산자는 특히 산술 연산자와 함께 자주 사용됩니다.
연산자기능연산 예
+= | 두 항의 값을 더해서 왼족 항에 대입합니다. | num1 += 2; num1 = num1 + 2;와 같음 |
-= | 왼쪽 항에서 오른족 항을 빼서 그 값을 왼쪽 항에 대입합니다. | num1 -= 2; num1 = num1 - 2;와 같음 |
*= | 두 항의 값을 곱해서 왼쪽 항에 대입합니다. | num1 *= 2; num1 = num1 * 2;와 같음 |
/= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입합니다. | num1 /= 2; num1 = num1 / 2;와 같음 |
%= | 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입합니다. | num1 %= 2; num1 = num1 % 2;와 같음 |
복합 대입 연산자를 사용하면 변수를 반복적으로 사용하지 않아도 되는 장점이 있습니다.
조건 연산자
- 조건 연산자는 연산에 필요한 항의 개수가 세 개입니다. 그래서 삼항 연산자라고 합니다.
연산자기능연산 예
조건식 ? 결과1 : 결과2; | 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택됩니다. | int num = (5 > 3)?10:20 |
package selfstudy;
public class Tstory13 {
public static void main(String[] args) {
int myage = 25;
int brotherage = 27;
char ch;
ch = (myage > brotherage)? 'T':'F';
System.out.println(ch);
}
}
실행결과
F
연산자 우선순위
- 연산자에는 우선순위가 있습니다.
- 우선순위에 따라 컴퓨터가 연산을 수행하고 그 결과가 달라집니다.
- 단항 연산자가 가장 높고 이항, 삼항 연산자 순서입니ㅏㄷ.
- 대입 연산자의 우선순위가 가장 낮습니다.
- 산술, 관계, 논리, 대입 연산자 순서로 우선순위를 가지며, ()의 우선순위가 가능 높습니다.
우선순위형연산자연산방향
1 | 일차식 | (), [] | ----> |
2 | 단항 | ! ++ -- + - | <---- |
3 | 산술 | % / | ----> |
4 | 산술 | + - | ----> |
5 | 관계 | < > <= >= | ----> |
6 | 관계 | == != | ----> |
7 | 논리 곱 | && | ----> |
8 | 논리 합 | (|| | ----> |
9 | 조건 | ?: | ----> |
10 | 대입 | = += -= *= %= /= | <---- |
댓글