연산 : 프로그래밍 중 데이터를 처리하여 결과를 만드는 것
연산자 : 그 연산 과정에서 사용되는 기호 또는 부호
피연산자 : 연산되는 데이터

| 종류 | 연산자 | 설명 |
|---|---|---|
| 산술 연산자 | +, -, *, /, % | 사칙연산 포함 기타 연산자 |
| 대입 연산자 | =, +=, -=, *=, /=, %= | = 오른쪽에 있는 값을 왼쪽에 대입하는 연산자 |
| 증감 연산자 | ++, -- | 피연산자를 하나만 갖는 단항 연산자 |
| 비교 연산자 | >, <, >=, <=, ==, != | 두 피연산자의 상대적인 크기를 비교하는 연산자 |
| 논리 연산자 | &&, or, !, &, ^, ~ | 주어진 논리식을 판단하여 true, false 를 결정하는 연산자 |
| 삼항 연산자 | ? : | 피연산자 항목이 3개인 연산자 |
| 비트 연산자 | &, bit, ^, ~, <<, >>, >>> | 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자 |
표에서 or 자리에는
||이 들어가야 하고, bit 자리에는|이 들어가야 한다.
int num1 = 20;
int num2 = 7;
System.out.println("num1 + num2 = " + (num1 + num2));
System.out.println("num1 - num2 = " + (num1 - num2));
System.out.println("num1 * num2 = " + (num1 * num2));
num1 + num2 = 27
num1 - num2 = 13
num1 * num2 = 140
num1, num2 를 더할 때 괄호가 없다면 자동 형변환이 되어 이어붙여진다.
나누기는 소수점이 나올 수도 있어서 실수 자료형이 필요하다.
double testNum = num1 / (double)num2; // 강제 형변환이 필요하다. System.out.println("testNum = " + testNum);testNum = 2.857142857142857
double resultNum = (int)(testNum * 1000)/(double)1000; // 1000으로 나눠줄 때 double형이어야지 뒤 소수점이 생긴다.
System.out.println("resultNum = " + resultNum);
resultNum = 2.857
System.out.println("num1 % num2 = " + (num1 % num2));
num1 % num2 = 6
| 종류 | 설명 |
|---|---|
| + | 왼쪽의 피연산자에 오른쪽의 피연산자를 더함 |
| - | 왼쪽의 피연산자에 오른쪽의 피연산자를 뺌 |
| * | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱함 |
| / | 왼쪽의 피연산자에 오른쪽의 피연산자를 나눔 |
| % | 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 나머지를 반환 |
대입 연산자 : 변수에 값을 대입할 때 사용하는 이항 연산자
| 종류 | 설명 |
|---|---|
| = | 왼쪽의 피연산자에 오른쪽의 피연산자를 대입함 |
| += | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입함 |
| -= | 왼쪽의 피연산자에 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입함 |
| *= | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입함 |
| /= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입함 |
| %= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입함 |
int num = 12;
System.out.println("num : " +num); // 12
//3증가시
num = num + 3; // 15 대입연산자의 오른쪽에는 값, 왼쪽에는 공간의 의미이다.
System.out.println("num : " + num);
num += 3; // 18 num = num + 3; 과 같은 의미임
System.out.println("num : " + num);
num -= 5; // 13 num = num - 5;
System.out.println("num : " + num);
num *= 2; // 26 num값 2배 증가
System.out.println("num : " + num);
num /= 2; // 13 num값 2배 감소
System.out.println("num : " + num);
/* 주의! 산술 복합 대입연산자의 작성 순서에 주의해야 한다. */
/* 산술 대입 연산자가 아닌 '-5'를 num에 대입한 것이다. */
num =- 5;
System.out.println("num : " + num); // - 5
num : 12
num : 15
num : 18
num : 13
num : 26
num : 13
num : -5
증감 연산자 : 피연산자를 1 증가 or 감소시킬 때 사용하는 연산자
| 종류 | 설명 |
|---|---|
| ++var | 피연산자의 값을 먼저 1을 증가시킨 후 다른 연산을 진행함 |
| var++ | 다른 연산을 먼저 진행하고 난 뒤 마지막에 피연산자의 값을 1 증가시킴 |
| --var | 피연산자의 값을 먼저 1 감소 시킨 후 다른 연산을 진행함 |
| var-- | 다른 연산을 먼저 진행하고 난 뒤 마지막에 피연산자의 값을 1 감소시킴 |
비교 연산자 : 피연산자 사이에서 상대적인 크기를 판단해 True or False 반환
True or False를 반환하는 연산자는 삼항연산자의 조건식이나 조건절에 많이 사용된다.
| 종류 | 설명 |
|---|---|
| == | 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 true 다르면 false를 반환 |
| != | 왼쪽의 피연산자와 오른쪽의 피연산자가 다르면 true 같으면 false를 반환 |
| > | 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 true 아니면 false를 반환 |
| >= | 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 true 아니면 false를 반환 |
| < | 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 true 아니면 false를 반환 |
| <= | 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 true 아니면 false를 반환 |
정수형과 실수형의 비교 연산자는 크게 어려움이 없을 것이고, 문자형에 대해서 다뤄보자.
아스키 코드에서 나타내는 'A', 'a'는 각각 65, 97로 나타내게 돼 숫자로 나타내는 것과 같다.
char ch1 = 'a';
char ch2 = 'A';
System.out.println("ch1과 ch2가 같은지 비교 : " + (ch1 == ch2));
System.out.println("ch1과 ch2가 같지 않은지 비교 : " + (ch1 != ch2));
System.out.println("ch1이 ch2보다 큰지 비교 : " + (ch1 > ch2));
System.out.println("ch1이 ch2보다 크거나 같은지 비교 : " + (ch1 >= ch2));
System.out.println("ch1이 ch2보다 작은지 비교 : " + (ch1 < ch2));
System.out.println("ch1이 ch2보다 작은거나 같은지 비교 : " + (ch1 <= ch2));
ch1과 ch2가 같은지 비교 : false
ch1과 ch2가 같지 않은지 비교 : true
ch1이 ch2보다 큰지 비교 : true
ch1이 ch2보다 크거나 같은지 비교 : true
ch1이 ch2보다 작은지 비교 : false
ch1이 ch2보다 작은거나 같은지 비교 : false
논리형은 같은지 아닌지만 비교가 가능하다.
논리 연결 연산자 : 2개의 피연산자를 가지는 이항 연산자, 연산자의 결합 방향은 왼쪽 -> 오른쪽이며 2개의 논리식을 판단해 참, 거짓을 판단한다.
논리 부정 연산자 : 피연산자가 하나인 단항 연산자, 피연산자의 결합 방향은 왼쪽 -> 오른쪽
| 종류 | 설명 |
|---|---|
| && | 두 개의 논리식 모두 참 일 경우 참을 반환, 둘 중 한 개라도 거짓인 경우 거짓을 반환하는 연산자이다.(AND) |
| ! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환한다.(NOT) |
AND 연산과 OR 연산의 특징
논리식 && 논리식 : 앞의 결과가 false이면 뒤를 실행 안함
논리식 || 논리식 : 앞의 결과가 true이면 뒤를 실행 안함
System.out.println(true && true); // true
System.out.println(true && false); // false
System.out.println(false && true); // false
System.out.println(false && false); // false
System.out.println(true || true); // true
System.out.println(true || false); // true
System.out.println(false || true); // true
System.out.println(false || false); // false
System.out.println(!true); // false
System.out.println(!false); // true
위와 같이 활용하는건 아니고, 논리식과 연산자를 함께 사용한다.
int num1 = 10;
int num2 = 20;
int num3 = 30;
int num4 = 40;
System.out.println(num1 < num2 && num3 < num4); // true && true -> true
System.out.println(num1 < num2 && num3 > num4); // true && false -> false
System.out.println(num1 > num2 && num3 < num4); // false && true -> false
System.out.println(num1 > num2 && num3 > num4); // false && false -> false
(
조건식) ?참일 때 사용할 값1:거짓일 때 사용할 값2
위와 같은 형태로 반드시 결과가 true or false가 나오게끔 해야 한다.
int num1 = 10;
int num2 = 20;
String result1 = (num1 > 0) ? "양수다." : "양수가 아니다.";
String result2 = (num2 > 0) ? "양수다." : "양수가 아니다.";
System.out.println("result1 = " + result1);
System.out.println("result2 = " + result2);
num1 > 0 이면 "양수다.", num1 <]= 0 이면 "양수가 아니다."와 같이 참일 때 사용할 값, 거짓일 때 사용할 값을 나눠서 조건식을 세울 수 있다.
result1 = 양수다.
result2 = 양수다.
중첩 또한 가능하지만 권장하지는 않는다.
int num3 = 0; int num4 = 1; int num5 = -1;
String result3 = (num3 > 0) ? "양수다" : (num3 == 0) ? "0이다." : "음수다.";
String result4 = (num4 > 0) ? "양수다" : (num4 == 0) ? "0이다." : "음수다.";
String result5 = (num5 > 0) ? "양수다" : (num5 == 0) ? "0이다." : "음수다.";
System.out.println("result3 = " + result3);
System.out.println("result4 = " + result4);
System.out.println("result5 = " + result5);