본문 바로가기
Java

Operators(연산자)

by 개발자공부 2024. 4. 10.

목차

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