본문 바로가기
프로그래밍/JAVA

[Java] 자바 연산자 (Java Operator)

by bits 2021. 1. 14.

이번 포스트에서는 자바 연산자에 대해 알아보겠습니다.

 

연산자 (Operator) 정의

  • 프로그램에서 데이터를 처리하여 결과를 산출하는 것을 연산(operation)이라 한다.
  • 연산에 사용되는 표시나 기호를 연산자(operator)라고 한다.
  • 연산되는 데이터는 피연산자(operand)라고 한다.
    예) 산술연산 +, -, *, /, %

연산자의 종류

자바에서 제공하는 연산자의 종류는 아래의 표와 같습니다.

종류 연산자 우선순위
증감 연산자 ++, -- 1순위
산술 연산자 +, -, *, /, % 2순위
시프트 연산자 >>, <<, >>> 3순위
비교 연산자 >, <. >=, <=, ==, != 4순위
비트 연산자 &, |, ^, ~ ~만 1순위, 나머지는 5순위
논리 연산자 &&, ||, ! !만 1순위, 나머지는 6순위
조건(삼항) 연산자 ?, : 7순위
대입 연산자 =, *=, /=, %=, +=, -= 8순위

 

 

지금부터 각각의 연산자에 대해 구체적으로 알아보도록 할까요?

 

증감 연산자

증감연산자는 피연산자의 값을 1씩 증가 또는 감소시키는 연산자이다. 증감 연산자가 변수 앞에 위치하느냐 변수 뒤에 위치하느냐에 따라 결과 값이 달라진다.

구분 연산자 설명
증감 연산자 x++ 먼저 해당 연산을 수행한 후 피연산자의 값을 1증가 시킴
++x 먼저 피연산자의 값을 1증가 시킨 후 해당 연산을 수행함
x-- 먼저 해당 연산을 수행한 후 피연산자의 값을 1감소 시킴
--x 먼저 피연산자의 값을 1감소 시킨 후 해당 연산을 수행함
// 증감연산자 ++, --
int x = 10;
//int y = x++;  // y = x; x = x + 1;
int y = ++x;    // x = x + 1; y = x;

System.out.println("x = " + x);
System.out.println("y = " + y);

 

산술 연산자

가장 기본이 되는 연산자로 4칙 연산(+, -, *, /)과 나머지 값을 구하는 나머지 연산자(%)가 있다.

구분 연산자 설명
산술 연산자 + 두 수에 대한 덧셈
- 두 수에 대한 뺄셈
* 두 수에 대한 곱셈
/ 두 수에 대한 나눗셈
% 두 수를 나눈 후 그 나머지를 반환한다.

4칙 연산은 다 아는 내용이라 생략하고, 나머지 연산자만 알아봅니다.

나머지 연산자(%)는 프로그래밍 작업 시 자주 사용되는 연산자입니다. 나머지 연산자의 결과 값은 왼쪽 피연산자의 값을 오른쪽 피연산자의 값으로 나눈 나머지 값을 반환합니다.

예를 들어 (x % n) 의 경우 x의 값이 어떤 수가 들어오든 나올 수 있는 값의 범위는 0 부터 n-1의 범위를 갖습니다.

아래와 같이 (x % 7) 연산의 값의 범위는 0 ~ 6의 값만 나오게 됩니다. 다시 말해 결과값이 회귀하게 되는 것이죠. 그래서 알고리즘을 구현한다던지 이럴 때 자주 사용되는 연산자입니다. 꼭 기억하세요.

int x = 1234;
System.out.println("x % 7 = " + (x % 7));  // 0 ~ 6 사이의 값을 반환
System.out.println("x % 2 = " + (x % 2));  // 0 ~ 1 사이의 값을 반환, x값이 홀수인지 짝수인지 구분에 유용

 

시프트(shift) 연산자

시프트 연산자는 bit단위의 연산처리를 하며 자료의 가공을 위해 오른쪽 또는 왼쪽으로 이동하여 값에 대한 변화를 일으키는 연산자입니다.

구분 연산자 설명
시프트 연산자 >> bit값을 오른쪽으로 이동 (빈 자리는 부호값으로 대입) 한다.
<< bit값을 왼쪽으로 이동 (빈 자리는 0으로 대입) 한다.
>>> bit값을 오른쪽으로 이동 (빈 자리는 0으로 대입) 한다.
// 쉬프트 연산자 >>, <<, >>>        
int x = 64;   // -64;
int n = 2;        
System.out.println("x >> n = " + (x >> n)); // 나눗셈, (x / 2^n)
System.out.println("x << n = " + (x << n)); // 곱셈,  (x * 2^n)
System.out.println("x >>> n = " + (x >>> n));

System.out.println("x >> 34 = " + (x >> 34));    // x / 2^(n % 32)
System.out.println("x << 34 = " + (x << 34));
System.out.println("x >>> 34 = " + (x >>> 34));

 

비교 연산자

변수나 상수의 값을 비교할 때 쓰이는 연산자로서 결과가 항상 true 또는 false인 논리값(boolean)이어야 한다.

구분 연산자 설명
비교 연산자 > 크다
< 작다
>= 크거나 같다
<= 작거나 같다
== 피연산자들의 값이 같다
!= 피연산자들의 값이 같지 않다
// 비교연산자 <, >, <=, >=, ==, !=
int x = 12;
int y = 15;
// boolean bool = x > y;
// boolean bool = x < y;
boolean bool = (x = x + 5) != y;
System.out.println("bool = " + bool);

 

논리 연산자

논리 연산자는 피연산자의 값이 true나 false인 논리 값을 가지고 다시 한번 조건 연산하는 연산자이다. 

 

논리 연산자의 종류(1)

구분 연산자 의미 설명
논리 연산자 & and (논리곱) 주어진 조건들이 모두 true일 때만 true를 나타낸다.
| or (논리합) 주어진 조건들 중 하나라도 true이면 true를 나타낸다.
! not (부정) true는 false로 false는 true로 나타낸다.

논리 연산자의 종류(2)

구분 설명
&& 선조건이 true일 때만 후조건을 실행하며 선조건이 false이면 후조건을 실행하지 않는다.
|| 선조건이 true이면 후조건을 실행하지 않으며 선조건이 false일 때만 후조건을 실행한다.

 

논리 연산자의 경우 논리곱(&, &&), 논리합(|, ||) 연산자가 2가지로 사용이 가능하다. 이들의 사용법은 차이가 있으며, 일반적으로 &&, || 이 연산자를 주로 사용한다.

 

// 논리연산자 &, |, !, &&, ||
x = 20;
y = 30;
bool = x < y || (x = x + 15) > y;
System.out.println("bool = " + bool);
System.out.println("x = " + x);

 

대입 연산자

특정한 상수 값이나 변수 값 또는 객체를 변수에 전달하여 기억시킬 때 사용하는 연산자이다.

구분 연산자 설명
대입 연산자 = 연산자를 중심으로 오른쪽 변수값을 왼쪽 변수에 대입한다.
+= 왼쪽 변수에 더하면서 대입한다.
-= 왼쪽 변수값에서 빼면서 대입한다.
*= 왼쪽 변수에 곱하면서 대입한다.
/= 왼쪽 변수에 나누면서 대입한다.
%= 왼쪽 변수에 나머지 값을 구하면서 대입한다.
// 대입연산자
int num = 120;

num += 30;		// 풀어서 쓰면 num = num + 30; 과 같다.
System.out.println("num = " + num);

// num = num + 3.14F;		// 에러 발생, 아래 코드와 같이 형 변환 해줘야 함.
num = (int)(num + 3.14F);  // int형으로 형 변환 했으므로 정상처리

num += 3.14F;       // 복합대입연산자를 사용시 대상 타입으로 자동 형 변환 해줌.

// 복합대입연산자의 형변환 : 복합대입연산자의 경우 최종 할당되는 변수의 데이터 타입으로 형 변환되서 계산됨.
// int x = 10; double y = 2.3;
// x += y; 이 코드는 x = (데이터타입)(x + y) 이렇게 계산이 됨.
int i = 10;
double rate = 0.01;        
i += (i * rate);    // 형변환되어서 들어가므로 에러 아님.

 

 

비트 연산자
피연산자 즉 연산의 대상이 되는 값들을 내부적으로 bit단위로 변경한 후 연산을 수행하는 연산자이다.

 

구분 연산자 설명
비트 연산자 & 비트 단위의 AND
| 비트 단위의 OR
^ XOR (배타적 OR)
~ 단항 연산자 이며, 비트를 반전한다. 0은 1로 1은 0으로 만듬

 

// 비트 연산자 &, |, ^, ~
int num = 170;       
System.out.println("num & 15 = " + (num & 15)); // num & 15 = 10 , mask 연산
System.out.println("num | 15 = " + (num | 15)); // num | 15 = 63, 특정 비트를 1로 셋팅
System.out.println("num ^ 15 = " + (num ^ 15)); // num ^ 15 = 58, 특정 비트를 반전시킬 때.
System.out.println("~num = " + (~num)); // ~num , 비트 반전, 1의 보수 표현

 

조건 연산자(삼항 연산자)
하나의 조건을 정의하여 만족 시에는 ‘참값’을 반환하고 만족하지 못할 시에는 ‘거짓값’을 반환하여 단순 비교에 의해 변화를 유도하는 연산자이다. 피연산자가 3개라 해서 삼항 연산자라고도 부른다.

구분 연산자 설명 구성
조건 연산자 ? : 제어문의 단일 비교문과 유사하다. 조건식 ? 참값 : 거짓값
// 조건 연산자 cond ? true : false
char gender = 'F';
System.out.println(gender == 'M' ? "남성" : "여성");

// 어떤 수가 양수, 음수, 영인지 판별하시오.
int no = -12;
System.out.println(no == 0 ? "영" : ( no > 0 ? "양수" : "음수"));

 

 

 

 

 

 

'프로그래밍 > JAVA' 카테고리의 다른 글

[Java] 변수와 자료형  (0) 2021.01.11
[Java] 자바 시작하기  (0) 2021.01.11

댓글