본문 바로가기

프로그래밍/Java

Java_연산자

단항과 연산자

항 (operand) : 연산에 사용되는 값
연산자 (operator) : 항을 이용하여 연산하는 기호
→ 연산자 우선순위
가장 낮은 순위 : =
가장 높은 순위 : () [] . <-- 우선순위를 가장 높게 하고 싶으면 ()로 묶어주면 된다.

대입 연산자 =

변수에 다른 변수나 값을 대입하는 연산자
왼쪽 변수 = 오른쪽 변수 (변수 또는 식 값)

부호 연산자

단항 연산자
변수의 부호를 유지하거나(+) 바꿈(-)
실제 변수의 부호를 변경 하려면 대입 연산자를 사용해야 함.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class OperationTest1 {
 
    public static void main(String[] args) {
 
        int num = 10;
        System.out.println(-num);
        
        num = -num;
        System.out.println(num);
 
    }
 
}
cs

→ System.out.println()을 이용하여 앞에 '-'를 붙이면 실제 값이 변경된 것이 아니다.
값을 변경하려면 대입 연산자를 이용해 num = -num;과 같이 코드를 작성해야 한다.

산술 연산자

사칙 연산자

연산자 기능
+ 두 항을 더한다.
- 앞에 있는 항에서 뒤에 있는 항을 뺀다.
* 두 항을 곱한다.
/ 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구한다.
% 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다.

복합 대입 연산자

대입 연산자와 다른 연산자가 함께 쓰임

연산자 기능 연산 예
+= 두 항의 값을 더해서 왼쪽 항에 대입한다. num1 += 2;
num1 = num1 + 2;와 같음
-= 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입한다. num1 -= 2;
num1 = num1 - 2;와 같음
*= 두 항의 값을 곱해서 왼쪽 항에 대입한다. num1 *= 2;
num1 = num1 * 2;와 같음
/= 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. num1 /= 2;
num1 = num1 / 2;와 같음
%= 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다. num1 %= 2;
num1 = num1 % 2;와 같음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class OperationTest1 {
 
    public static void main(String[] args) {
 
        int num1 = 0;
        // num1 = num1 + 2;
        num1 += 2;
        System.out.println(num1);
 
        int num2 = 0;
        // num2 = num2 - 2;
        num2 -= 2;
        System.out.println(num2);
 
        int num3 = 1;
        num3 *= 3;
        System.out.println(num3);
 
        int num4 = 10;
        num4 /= 3;
        System.out.println(num4);
 
        int num5 = 5;
        num5 %= 3;
        System.out.println(num5);
 
    }
 
}
결과 화면
2
-2
3
3
2
cs

→ ' /= '을 사용하면 결과값으로 3.333333333..이 나와야 하는데 3이 나오는 이유는 데이터 타입을 int로 변수를 생성했기 때문에 3으로 출력된다.

증가, 감소 연산자

단항 연산자
변수의 값을 1 더하거나 1 뺄 때 사용
연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라진다.
문장의 끝 ';'을 기준으로 연산 시점을 생각해야 함

연산자 기능 연산 예
++ 항의 값에서 1을 더한다. i = ++num; //먼저 num값이 1 증가한 후 i 변수에 대입
i = num++; //i 변수에 기존 num값을 먼저 대입한 후 num 값 1 증가
-- 항의 값에서 1을 뺀다. i = --num; //먼저 num 값이 1 감소한 후 i 변수에 대입
i = num--; //i 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class incdec_operator_5 {
 
    public static void main(String[] args) {
        int cnt=10;
        
        System.out.println(cnt++);    //10
        System.out.println(--cnt);    //10
        System.out.println(cnt--);    //10
        System.out.println(cnt--);    //9
        System.out.println(cnt++);    //8
        System.out.println(++cnt);    //10
        System.out.println(cnt--);    //10
        System.out.println(--cnt);    //8
        System.out.println(cnt++);    //8
        System.out.println(--cnt);    //8
        System.out.println(cnt++);    //8
    }
 
}
cs

관계 연산자 (비교 연산자)

이항 연산자
연산의 결과가 true(참), false(거짓)으로 반환된다.
조건문, 반복문의 조건식으로 많이 사용된다.

연산자 기능
< 왼쪽 항이 크면 참을, 아니면 거짓을 반환
< 왼쪽 항이 작으면 참, 아니면 거짓을 반환
>= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓 반환
<= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓 반환
== 두 개 항의 값이 같으면 참, 아니면 거짓 반환
!= 두 개 항이 다르면 참, 아니면 거짓 반환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package ch03;
 
public class MainTest5 {
 
    //main함수
    public static void main(String[] args) {
        
        int num1 = 5;
        int num2 = 3;
        
        //5 > 3;
        System.out.println(5 > 3);
        boolean value1 = 5 > 3;
        System.out.println(value1);
        
        boolean value2 = 5 < 3;
        System.out.println(value2);
        
        boolean value3 = num1==num2;
        System.out.println(value3);
        
        boolean value4 = num1 != num2;
        System.out.println(value4);
 
    } //end of main
 
//end of class
결과
true
true
false
false
true
cs

→ 주어를 관계 연산자로 바라보면 이해하기 편하다.

논리 연산자

관계 연산자와 혼합하여 많이 사용된다.
연산의 결과가 true(참), false(거짓)으로 반환된다.

연산자 기능
&& (논리 곱) 두 항이 모두 참인 경우에만 결과 값이 참, 그렇지 않은 경우는 거짓
|| (논리 합) 두 항 중 하나의 항만 참이면 결과 값은 참, 두 항이 모두 거짓이면 결과값은 거짓
! (부정) 참인 경우 거짓으로 바꾸고, 거짓인 경우 참으로 바꾼다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package ch03;
 
public class MainTest6 {
 
    //main함수
    public static void main(String[] args) {
        
        int num1 = 10;
        int num2 = 20;
        
        boolean flag1 = (num1 > 0&& (num2 > 0);
        System.out.println(flag1);
        
        //           T              F  --> F : 논리곱은 반드시 전부 T일 때만 T이다.
        flag1 = (num1 > 0&& (num1 < 0);
        //                   !F  --> T
        System.out.println(!(flag1));
        
        //                   T     ||      F  : 여러개중 하나라도 T이면 T이다.
        boolean flag2 = (num1 > 0|| (num2 < 0);
        System.out.println(flag2);
        
        System.out.println(!(5 > 3));
    } //end of main
 
//end of class
 
결과
true
true
true
false
cs

→ 논리곱에서는 하나라도 거짓이 있으면 연산에 결과는 false이고, 논리합에서 하나라도 참이 있으면 연산에 결과는 true이다.

- 논리 연산에서 모든 항이 실행되지 않는 경우 (short circuit evaluation)

쇼트서킷이란 && 앞의 boolean값이 false일 때 && 뒤를 실행하지 않음으로 불필요한 연산을 생략하고,
마찬가지로 || 앞의 boolean 값이 false일 때만 뒤를 실행한다. 즉, || 앞쪽이 true 라면 뒤를 연산하지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package ch03;
 
public class ShortCircuitTest {
 
    public static void main(String[] args) {
 
        int num1 = 5;
        int i = 0;
 
        //                    F             &&        T
        boolean value = ((num1 += 10< 10&& ((i += 2< 10);
        System.out.println(value);
        System.out.println("=============");
        System.out.println(num1);
        System.out.println(i);
        
        System.out.println("=============");
        
        //               F          ||         T
        value = ((num1 += 10< 10|| ((i +=2< 10);
        System.out.println(value);
        System.out.println(i);
        
        System.out.println("=============");
        
    }
 
}
 
결과
false
=============
15
0
=============
true
2
=============
cs

조건 연산자

삼항 연산자
조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행된다.
if문을 간단히 표현할 때 사용할 수 있다.

조건식 ? 결과1 : 결과2;

→ 조건식이 참이면 결과1, 조건식이 거짓이면 결과2를 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package ch03;
 
// 예약어 - 수입하다, 가져오다 / 자바 개발자들 미리 사용하라고 만들어 둠
import java.util.Scanner;
 
public class MainTest7 {
 
    // main함수
    public static void main(String[] args) {
 
        int max = 0;
        System.out.println("입력 받은 두 수 중 큰 수를 출력하시오.");
 
        // JDK 에 만들어 둔 도구
        // 입력 장치 (키보드에 있는 어떠한 값을 받아 준다.)
        Scanner scn = new Scanner(System.in);
        
        System.out.println("입력 1 : ");
        int x = scn.nextInt(); //nextInt() : 정수값만 받을 수 있음
 
        System.out.println("입력 2 : ");
        int y = scn.nextInt();
 
        System.out.println("==============");
        // 여기까지 코드가 내려온다면 x값이 담겨 있고 y값이 담겨 있는 상태이다.
 
        // x값과 y값을 비교해서 두 수 중 큰 수를 화면에 출력하시오.
        max = (x > y) ? x : y;
        System.out.println("두 수 중 큰 수:" + max);
 
    } // end of main
 
// end of class
 
결과
입력 받은 두 수 중 큰 수를 출력하시오.
입력 1 :
7
입력 2 :
4
==============
두 수 중 큰 수:7
cs

→ 스캐너를 이용하여 두 수 중 큰 수를 출력하는 프로그램이다.
스캐너란 자바에서 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스이다.

→ int x와 int y의 값을 입력받아 삼항 연산자를 이용하여 입력받은 x와 y값 중 더 큰 값을 max에 저장해 출력하는 프로그램이다.

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

Java_반복문 for 문과 while 문  (0) 2023.02.05
Java_조건문 if 문  (0) 2023.02.05
상수와 형 변환  (0) 2023.02.03
Java_자료형(데이터 타입)  (0) 2023.02.02
Java_컴파일 시점 VS 런타임 시점  (0) 2023.02.02