목차
0. 항과 연산자 개념
1. 단항 연산자
2. 이항 연산자
3. 빠른 평가
4. 삼항 연산자
5. 연산자 우선순위
0. 항과 연산자 개념
Operands 항 : 연산 과정에서 사용되는 데이터나 값을 일컫는다. 피연산자라고도 한다.
Operators 연산자 : 하나 이상의 항을 사용하여 특정 연산을 수행하는 기호
1. 단항 연산자
항이 하나만 있어도 변수에 부호(리터럴 값)를 변경할 수 있는 것을 말한다.
부호 연산자 ' + ' , ' - '
부호 연산자는 변수의 부호를 변경하거나 유지하는 단항 연산자이다. + 연산자는 변수의 부호를 그대로 두고 - 연산자는 변수의 부호를 반전시킨다. 변수의 실제 값을 변경하고자 할 때는 부호 연산자와 함께 대입 연산자를 사용해야 한다.
구분 | 연산자 | 설명 |
부호연산자 | + | 변수 부호를 그대로 둔다. |
- | 변수 부호를 반전시킨다. |
int intData = 1000;
System.out.println(+intData); // 1000이 출력된다.
System.out.println(-intData); // -1000이 출력된다.
System.out.println(intData); // 실제 값이 바뀐 것은 아니라는 걸 확인할 수 있다.
intData = -intData;
System.out.println("실제 변수 안에 들어있는 값 : " + intData);
// -로 실제 값이 변한 것을 확인할 수 있다.
2-1. 부호 연산자 연습문제
■ 문제 1. 제로 포인트에서 왼쪽으로 3칸 이동한 값을 출력해보기.
int oneStepDistance = 1;
final int ZERO_POINT = 0;
int currentPosition = 0;
currentPosition = ZERO_POINT - (oneStepDistance * 3);
System.out.println(currentPosition);
■ 문제 2. 위에서 구한 값을 Math 라이브러리를 이용하여 절댓값으로 출력해보기.
※ Math 라이브러리 : 여러 자바 개발자가 이미 만들어 둔 도구이다. Math math; 는 수학과 관련된 기능을 모아놓았다.
System.out.println("Math 라이브러리 사용 : " + Math.abs(currentPosition));
증감, 감소 연산자 ' ++ ' , ' -- '
단항 연산자이며, 변수 값을 오직 1 더하거나 1 뺄 때 사용한다.
연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라진다.
문장(statement) 끝(;)을 기준으로 연산 시점을 생각해야 한다.
구분 | 연산자 | 설명 | 예제 |
증감, 감소 연산자 | ++ | 변수 값을 1 더한다. | ++num : 다른 연산 수행하기전에 피연산자 1증감. num++ : 다른 연산을 수행한 후 피연산자 1증감 |
-- | 변수 값을 1 뺀다. | --num : 다른 연산 수행하기전에 피연산자 1감소. num-- : 다른 연산을 수행한 후 피연산자 1감소. |
논리 부정 연산자 ' ! '
구분 | 연산자 | 설명 | 예제 |
논리 연산자 | ! (부정) | 단항 연산자. 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꾼다. | booleanval = !(5 > 3); |
2. 이항 연산자
피연산자 즉 항이 2개인 연산자이다.
산술 연산자(+, -, *, /, %), 문자열 결합 연산자(+), 비교 연산자(<, <=, >, >=, ==, !=), 논리 연산자(&&, ||, &, |, ^, !), 대입 연산자(=, +=, -=, *=, /=, %=) 등이 있다.
Assignment Operator 대입 연산자 ' = '
대입 연산자는 특정 값이나 다른 변수의 결과를 변수에 할당(대입)하는 데 사용된다. 대부분의 이항 연산자 중에서 실행 우선순위가 가장 낮아서 대부분의 연산이 이루어진 후에 마지막으로 값이 할당된다. 연산 순서가 오른쪽에서 왼쪽이다.
기본 형태는 왼쪽 변수 = 오른쪽 표현식(값, 변수 또는 계산식)이다.
산술 연산자 ' + ' , ' - ' , ' * ' , ' / ' , ' % '
구분 | 연산자 | 설명 | 예제 |
산술연산자 | + | 두 항을 더한다. | int result1 = 5 + 3; |
- | 앞에 있는 항에서 뒤에 있는 항을 뺀다. | int result2 = 5 - 3; | |
* | 두 항을 곱한다. | int result3 = 5 * 3; | |
/ | 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구한다. | int result4 = 5 / 3; | |
% | 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다. | int result5 = 5 % 3; |
3-1. 산술 연산자 연습문제
■ 문제 1. (12 + 3) / 3 값을 화면에 출력해보기.
int data1 = 12;
int data2 = 3;
int result = (data1 + data2) / 3;
System.out.println(result);
■ 문제 2. (25 % 2) 값을 화면에 출력해보기.
int data3 = 25;
int data4 = 2;
int result2 = (data1 % data2);
System.out.println(result2);
// 어떤 수를 2로 나누었을 때 나머지가 0이면 짝수이고, 1이면 홀수이다.
■ 문제 3. 15를 4로 나눈 후, 그 결과의 절댓값을 출력해보기.
int data5 = 15;
int data6 = 4;
int result3 = data5 / data6;
System.out.println(Math.abs(result3));
■ 문제 4. 어느 과일가게에서 딸기를 만원, 망고를 육천원, 용과를 칠천원에 개당 가격으로 판매하고 있다. 종류 별로 2개씩 씩 구매한 후 20% 할인 받는다면 총 얼마를 지불하면 되는가?
int strawberry = 10000;
int mango = 6000;
int dragonFruit = 7000;
double saleRate = 0.2;
int originalTotal;
double discountedTotal;
originalTotal = 2 * ( strawberry + mango + dragonFruit );
discountedTotal = originalTotal - ( 1 - saleRate );
System.out.println(discountedTotal);
복합 대입 연산자 ' += ' , ' -= ' , ' *= ' , ' /= ' , ' %= '
대입 연산자와 다른 연산자(산술 연산자)가 함께 쓰인다. 복합 대입 연산자는 대입 연산자 앞에 연산자를 작성해야 한다.
구분 | 연산자 | 설명 | 예제 |
복합 대입 연산자 | += | 두 항의 값을 더해서 왼쪽 항에 대입한다. | int num1 += 2; ( int num1 = num1 + 2; 와 같다. ) |
-= | 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입한다. | int num1 -= 2; ( int num1 = num1 - 2; 와 같다. ) |
|
*= | 두 항의 값을 곱해서 왼쪽 항에 대입한다. | int num1 *= 2; ( int num1 = num1 * 2; 와 같다. ) |
|
/= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. | int num1 /= 2; ( int num1 = num1 / 2; 와 같다. ) |
|
%= | 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다. | int num1 %= 2; ( int num1 = num1 % 2; 와 같다. ) |
관계(비교)연산자 ' > ' , ' < ' , ' >= ' , ' <= ' , ' == ' , ' != '
이항 연산자. 연산의 결과가 true(참), false(거짓)으로 반환된다. 비교연산자라고도 한다.
조건문(if), 반복문(for)의 조건식으로 많이 사용된다.
구분 | 연산자 | 설명 | 예제 |
관계(비교)연산자 | > | 왼쪽 항이 크면 참 아니면 거짓을 반환한다. | num > 3 ; |
< | 왼쪽 항이 작으면 참 아니면 거짓을 반환한다. | num < 3 ; | |
>= | 왼쪽 항이 오른쪽 항보다 크거나 같은면 참 아니면 거짓을 반환한다. | num >= 3 ; | |
<= | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참 아니면 거짓을 반환한다. | num <= 3 ; | |
== | 두 개 항의 값이 같으면 참 아니면 거짓을 반환한다. | num == 3 ; | |
!= | 두 개 항이 다르면 참 아니면 거짓을 반환한다. | num != 3 ; |
논리 연산자 ' && ' , ' || ' , ' ! '
관계 연산자와 혼합하여 많이 사용된다. 연산의 결과가 true(참), false(거짓)으로 반환된다.
구분 | 연산자 | 설명 | 예제 |
논리 연산자 | && (논리 곱) | 두 항이 모두 참인 경우에만 결과 값이 참이다. 그렇지 않은 경우는 거짓. | booleanval = (5 > 3) && (5 > 2); 두 항이 모두 참이므로 결과값은 참이다. |
|| (논리 합) | 두 항 중 하나의 항만 참이면 결과 값은 참이다. 두 항이 모두 거짓이면 결과 값은 거짓. | booleanval = (5 > 3) || (5 < 2); || 기준으로 왼쪽 항은 참, 오른쪽 항은 거짓이다. 하나만 참이어도 되니 결과값은 참이다. |
|
! (부정) | 위 단항 연산자 부분에 설명되어 있다. |
3. Short-circuit evaluation 빠른 평가
논리 연산에서 첫 번째 조건이 결과를 결정하는 경우, 두 번째 조건을 평가하지 않는 자바의 특성이다.
■ 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true로 출력된다.
앞의 항 결과가 false이면 뒤 항의 결과를 평가하지 않는다.
■ 논리 합은 두 항의 결과가 모두 false일 때만 결과가 false로 출력된다.
앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않는다.
4. 삼항 연산자(조건 연산자) ' 조건식 ? 결과1 : 결과2 '
조건식의 결과가 true인 경우와 false인 경우에 따라 다른 결과가 수행된다.
if (조건문)를 간단히 표현할 때 사용할 수 있다.
구분 | 연산자 | 설명 | 예제 |
삼항(조건) 연산자 | 조건식 ? 결과1 : 결과2 | 조건식이 참이면 결과1, 조건식이 거짓이면 결과 2가 선택된다. | int num = (5 > 3) ? 10 : 20; |
5. 연산자 우선순위
순위가 가장 높은 연산자 : 소괄호 () 대괄호 [] 마침표. ☜ 총 3개이다.
순위가 가장 낮은 연산자 : 대입 연산자 =
■ 단항, 이항, 삼항 연산자 순으로 우선순위가 높다.
■ 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.
■ 단항, 부호, 대입 연산자를 제외한 모든 연산 방향은 왼쪽에서 오른쪽이다.
■ 복잡한 연산식에는 소괄호 ()를 사용하여 우선순위를 정한다.
'Java' 카테고리의 다른 글
접근 제어 지시자 (0) | 2024.04.18 |
---|---|
OOP(객체지향 프로그래밍) (0) | 2024.04.16 |
명령어로 컴파일, 실행 (0) | 2024.04.10 |
Type casting(형 변환) (0) | 2024.04.10 |
Constant(상수)와 Literal(리터럴) (0) | 2024.04.10 |