씨네
공부하는 개발자 강씨네
씨네
  • 분류 전체보기 (460)
    • Web (21)
      • HTML (11)
      • CSS (10)
    • JS 관련 (49)
      • JavaScript (27)
      • JQuery (22)
    • TS 관련 (15)
      • TypeScript (15)
    • NodeJS (7)
      • NodeJS (7)
    • 따라하며 배우는 시리즈 (23)
      • NodeJS & ReactJS Basic (23)
      • NodeJS & ReactJS Movie (0)
      • NodeJS & ReactJS Youtube (0)
      • NodeJS & ReactJS ChatBot (0)
    • SPA (14)
      • React (14)
      • Vue (0)
      • Anguler (0)
    • Java 관련 (118)
      • Java (52)
      • JDBC (6)
      • JSP & Servlet (18)
      • Spring Legecy (38)
      • SpringBoot (4)
    • Python (26)
      • Python (20)
      • PyMongo (1)
      • Django (5)
    • Git (24)
      • Github (24)
    • RDB (22)
      • Oracle (21)
      • MySQL (1)
    • NoSQL (5)
      • MongoDB (5)
    • OS (4)
      • Linux (4)
    • 빅데이터 (2)
      • hadoop (2)
    • IDE (20)
      • eclipse (11)
      • VSCODE (4)
      • VisualStudio (1)
      • IntelliJ (1)
      • PyCharm (1)
      • DBeaver (2)
    • Install (3)
      • Tomcat (1)
      • Docker (1)
      • Anaconda (1)
    • 오류&에러 (28)
      • TS (2)
      • NodeJS (7)
      • SQL (8)
      • Java (1)
      • Spring (4)
      • Git (6)
      • 기타 (0)
    • 알고리즘 (67)
      • 수열 (1)
      • 백준(backjoon) (39)
      • Programmers (27)
    • 자격증 (5)
      • SQLD (5)
    • 기타 (2)
    • IT유튜브로 지식쌓기 (2)

공지사항

인기 글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
씨네

공부하는 개발자 강씨네

[Java] 자바 연산자(Operator)
Java 관련/Java

[Java] 자바 연산자(Operator)

2021. 10. 7. 07:37
728x90


자바에서는 우리가 흔히 사용하는 사칙연산 외에도 다른 연산이 존재합니다.

크게 보면 이러한 사칙연산을 포함한 산술연산자, 대입을 위한 대입 연산자, 다양한 문법에 사용 가능한 증감 연산자, 변수들의 비교를 위한 비교연산자, 참 거짓을 판단하는 논리연산자, 비트 단위 연산의 비트 연산자 등이 있습니다.

이런 다양한 연산자들을 조금 자세히 볼까요?

​

1. 산술연산자

산술연산자는 우리가 알고 있는 사칙연산( +, -, *, /) 외에도 % 연산이 존재합니다.

또한 다른 연산자에도 산술연산이 많이 포함되어 있으며 가장 많이 쓰는 연산자라고 할 수 있습니다.

연산을 할 때 두 개 이상의 연산자가 들어갈 수도 있겠죠?

산술연산자 설명
+ 왼쪽의 피연산자에 오른쪽 피연산자를 더합니다.
- 왼쪽의 피연산자에 오른쪽 피연산자를 뺍니다.
* 왼쪽의 피연산자에 오른쪽 피연산자를 곱합니다.
/ 왼쪽의 피연산자에 오른쪽 피연산자를 나눕니다.
% 왼쪽의 피연산자에 오른쪽 피연산자를 나눈 후, 그 나머지를 반환합니다.

​

int num1 = 10; 
int num2 = 15; 

System.out.println("+연산자 결과 : " + (num1 + num2)); 
System.out.println("-연산자 결과 : " + (num1 - num2)); 
System.out.println("*연산자 결과 : " + (num1 * num2)); 
System.out.println("/연산자 결과 : " + (num1 / num2)); 
System.out.println("%연산자 결과 : " + (num1 % num2));

해당 코드를 출력시키면 어떤 결과가 나올까요?

이런 결과가 나옵니다!

나누기 연산자는 나눈 후 값의 나머지는 버리고 출력이 된다는 걸 알 수 있습니다.

그런데 이런 연산에서도 우선순위가 있습니다!

연산은 왼쪽에서부터 순차적으로 하는 것을 기본 시 하지만 위 그림처럼 +보다는 *가 먼저 처리됩니다. 또한 ( ) 안에 들어있는 것을 가장 먼저 처리합니다.

​

2. 대입 연산자

대입 연산자는 변수에 값을 대입할 때 주로 사용되는 연산자입니다.

대입 연산자는 산술 연산자와 다르게 결합의 방향이 오른쪽에서 왼쪽입니다.

대입 연산자 설명
= 왼쪽의 피연산자에 오른쪽의 피연산자를 대입합니다
+= 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후 그 결과를 왼쪽의 피연산자에 대입합니다.
-= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후 그 결과를 왼쪽의 피연산자에 대입합니다.
*= 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후 그 결과를 왼쪽의 피연산자에 대입합니다.
/= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후 그 결과를 왼쪽의 피연산자에 대입합니다.
%= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후 그 나머지를 왼쪽의 피연산자에 대입합니다.
&= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산 후 그 결과를 왼쪽의 피연산자에 대입합니다.
|= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산 후 그 결과를 왼쪽의 피연산자에 대입합니다.
^= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산 후 그 결과를 왼쪽의 피연산자에 대입합니다.
int num1 = 10, num2 = 10, num3 = 10, num4 = 10, num5 = 10; 

num1 += 5; //num1 = num1 + 5; 와 같음 
num2 -= 5; //num2 = num2 - 5; 와 같음 
num3 *= 5; //num3 = num3 * 5; 와 같음 
num4 /= 5; //num4 = num4 / 5; 와 같음 
num5 %= 5; //num5 = num5 % 5; 와같음 

System.out.println("+=연산자 결과 : " + num1); 
System.out.println("-=연산자 결과 : " + num2); 
System.out.println("*=연산자 결과 : " + num3); 
System.out.println("/=연산자 결과 : " + num4); 
System.out.println("%=연산자 결과 : " + num5);

위 코드에서 보면 변수를 선언할 때 초기화를 시켜주는 과정에서 대입 연산자가 사용되었습니다.

그리고 해당 출력값을 보면 다음과 같습니다.

type 변수 = 변수 + 값; type += 변수;

이런 형태로 출력이 됩니다.

​

산술 연산은 왼쪽부터 진행이 되지만 대입 연산은 위 그림과 같이 오른쪽부터 진행이 됩니다. 따라서 여러 개의 대입 연산이 있을 때는 가장 오른쪽에 있는 값이 순차적으로 들어갑니다.

​

​

3. 증감 연산자

증감 연산자 설명
++i 먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행합니다.
i++ 먼저 해당 연산 수행 후 피연산자의 값을 1 증가시킵니다.
--i 먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 진행합니다.
i-- 먼저 해당 연산 수행 후 피연산자의 값을 1 감소시킵니다.
int num1 = 10, num2 = 10, num3 = 10, num4 = 10; 

System.out.println("++i연산자 결과 : " + ++num1); 
System.out.println("i++연산자 결과 : " + num2++); 
System.out.println("--i연산자 결과 : " + --num3); 
System.out.println("i--연산자 결과 : " + num4--);

위 코드의 출력은 다음과 같습니다.

++나 --가 앞에 있을 경우 연산을 먼저 수행하고 값이 들어가고 뒤에 있을 경우 값은 명령 수행 후에 변화합니다.

​

4. 비교 연산자

비교 연산자는 말 그대로 피연산자의 값을 비교합니다.

비교 연산자 설명
== 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 참을 반환합니다.
!= 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환합니다.
> 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 참을 반환합니다.
>= 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 참을 반환합니다.
< 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 참을 반환합니다.
<= 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 참을 반환합니다.
int i1 = 1, i2 = 2; 

System.out.println("==연산자 결과 : " + (i1 == i2)); 
System.out.println("!=연산자 결과 : " + (i1 != i2)); 
System.out.println(">연산자 결과 : " + (i1 > i2)); 
System.out.println(">=연산자 결과 : " + (i1 >= i2)); 
System.out.println("<연산자 결과 : " + (i1 < i2)); 
System.out.println("<=연산자 결과 : " + (i1 <= i2));

비교 연산자는 비교적 어렵지 않으시죠?

​

​

5. 논리 연산자

논리 연산자는 식을 판단해서 참인지 거짓인지를 구분하여 리턴해주는 연산자입니다.

논리 연산자 설명
&& 논리식이 모두 참이면 참을 반환합니다. (논리 AND 연산)
|| 논리식 중에서 하나라도 참이면 참을 반환합니다. (논리 OR 연산)
! 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환합니다. (논리 NOT 연산)

​

6. 비트 연산자

비트 연산자는 논리 연산자와 비슷할 수 있지만 비트 단위의 논리 연산을 할 때 사용합니다.

비트 단위에서 왼쪽 또는 오른쪽으로 이동시키거나 보수를 만들 때 사용되기도 합니다.

비트 연산자 설명
& 대응되는 비트가 모두 1이면 1을 반환합니다. (비트 AND 연산)
| 대응되는 비트 중에서 하나라도 1이면 1을 반환합니다. (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1을 반환합니다. (비트 XOR 연산)
~ 비트를 1이면 0으로, 0이면 1로 반전시킵니다. (비트 NOT 연산, 1의 보수)
<< 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킵니다. (left shift 연산)
>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킵니다. (right shift 연산)

AND 연산은 두 비트를 비교한 후에 둘 다 1일 경우 0을 반환합니다.

하나라도 0이면 0을 반환합니다.

​

​

OR 연산은 두 비트를 비교하고 둘 중 하나라도 1이면 1을 반환합니다.

두 비트 모두 0일 때만 0을 반환합니다.

​

​

XOR 연산은 두 비트를 비교하여 두 비트가 둘 다 0이거나 둘 다 1일 경우 0을 반환합니다.

하나는 1하나는 0일 경우 0을 반환합니다.

​

​

NOT은 어떤 비트에서 비트의 값을 반전시켜줍니다.

즉, 1일 경우 0을 반환하고 0일 경우 1을 반환합니다.

​

​

7. 삼항연산자

삼항연산자는 피 연산자 3개가 필요한 연산자입니다.

(조건식) ? 참일때 반환값 : 거짓일때 반환값;

 

을 기본 형태로 하는데요.

조건식에 따라 결과가 참이면 왼쪽 반환값을 반환하고 거짓이면 오른쪽 반환값을 반환합니다.

삼 항 연산자는 2개를 사용할 수도 있습니다.

(조건식) ? (조건식) ? 참일때반환값 : 거짓일때 반환값 : 거짓일때 반환값;

 

int a = 10; 
int b = 7; 

int result = (a > b) ? a - b : b - a; 

System.out.println(result); 

String res = (a > b) ? "a가 b보다 크다" : (a < b) ? "a가 b보다 작다" : "a와 b는 같다"; 
System.out.println(res);

위 코드를 이클립스에서 실행시켜보면 이렇게 출력이 되네요.

728x90

'Java 관련 > Java' 카테고리의 다른 글

[Java] 제어문 - 조건문(switch 문)  (0) 2021.10.09
[Java] 제어문 - 조건문(if 문)  (0) 2021.10.08
[Java] 형 변환(Type Casting) - TypeToType  (0) 2021.10.06
[Java] 자바에서 여러가지 타입(Type)  (0) 2021.10.05
[Java] 변수 표기법, 출력문, 주석  (0) 2021.10.04
    'Java 관련/Java' 카테고리의 다른 글
    • [Java] 제어문 - 조건문(switch 문)
    • [Java] 제어문 - 조건문(if 문)
    • [Java] 형 변환(Type Casting) - TypeToType
    • [Java] 자바에서 여러가지 타입(Type)
    씨네
    씨네
    개발자 씨네가 공부하는 내용을 기록 겸 공유하는 블로그입니다!

    티스토리툴바