# Part 02. 연산자

## 연산자와 피연산자 구별하기

> ## 9 \* x + 3

* 연산자 : 연산을 수행하는 기호 -> \* , +
* 피연산자 : 연산자의 연산 수행 대상 -> 9 ,  x , 3

> ## "모든 연산자는 <mark style="color:blue;">연산결과를 반환</mark>한다."
>
> * 즉, 연산결과를 반환하지 않으면 연산자가 아니다.
>   * ex) () -> <mark style="color:blue;">괄호는 연산자가 아니다.</mark>

## 연산자의 종류

|   종류   |                  연산자                  |                설명               |
| :----: | :-----------------------------------: | :-----------------------------: |
| 산술 연산자 |   +    -    \*    /    %    <<    >>  |         사칙 연산과 나머지 연산(%)        |
| 비교 연산자 |     <    >    >=    <=    ==    !=    |         크고 작음과 같고 다름을 비교        |
| 논리 연산자 | &&    \|\|    !    &    \|    ^    \~ | '그리고(AND)' 와 '또는(OR)' 으로 조건을 연결 |
| 대입 연산자 |                   =                   |          우변의 값을 좌변에 저장          |
| 기타 연산자 |      (type)     ?:     instanceof     |  형변환 연산자, 삼항 연산자, instanceof연산자 |

## 연산자의 우선순위

> ### 하나의 식에 연산자가 둘 이상 있을 때, 어떤 연산을 먼저 수행 할지를 자동 결정하는 것!
>
> #### = > 5 + 3 \* 4
>
> 1. 3 \* 4
> 2. 5 + 12&#x20;
>
> #### 연산 순서를 수동으로 결정하고 싶다면 <mark style="color:blue;">괄호()</mark> 를 사용하면 됩니다.
>
> #### = > (5 + 3) \* 4
>
> 1. 5 + 3
> 2. 8 \* 4

### 연산자 우선순위 표

| 우선순위 |     연산자    |                                    설명                                    |    결합 방향   |
| :--: | :--------: | :----------------------------------------------------------------------: | :--------: |
|   1  |     \[]    |                                  첨자 연산자                                  | 왼쪽에서 오른쪽으로 |
|      |      .     |                                  멤버 연산자                                  | 왼쪽에서 오른쪽으로 |
|   2  |     ++     |                                 후위 증가 연산자                                | 왼쪽에서 오른쪽으로 |
|      |     --     |                                 후위 감소 연산자                                | 왼쪽에서 오른쪽으로 |
|   3  |      !     |                                논리 NOT 연산자                                | 오른쪽에서 왼쪽으로 |
|      |     \~     |                                비트 NOT 연산자                                | 오른쪽에서 왼쪽으로 |
|      |      +     |                              양의 부호 (단항 연산자)                              | 오른쪽에서 왼쪽으로 |
|      |      -     |                              음의 부호 (단항 연산자)                              | 오른쪽에서 왼쪽으로 |
|      |     ++     |                                 전위 증가 연산자                                | 오른쪽에서 왼쪽으로 |
|      |     --     |                                 전위 감소 연산자                                | 오른쪽에서 왼쪽으로 |
|      |    (타입)    |                                타입 캐스트 연산자                                | 오른쪽에서 왼쪽으로 |
|   4  |     \*     |                                  곱셈 연산자                                  | 왼쪽에서 오른쪽으로 |
|      |      /     |                                  나눗셈 연산자                                 | 왼쪽에서 오른쪽으로 |
|      |      %     |                                  나머지 연산자                                 | 왼쪽에서 오른쪽으로 |
|   5  |      +     |                              덧셈 연산자 (이항 연산자)                             | 왼쪽에서 오른쪽으로 |
|      |      -     |                              뺄셈 연산자 (이항 연산자)                             | 왼쪽에서 오른쪽으로 |
|   6  |     <<     |                               비트 왼쪽 시프트 연산자                              | 왼쪽에서 오른쪽으로 |
|      |     >>     |                          부호 비트를 확장하면서 비트 오른쪽 시프트                         | 왼쪽에서 오른쪽으로 |
|      |     >>>    |                           부호 비트까지 모두 비트 오른쪽 시프트                          | 왼쪽에서 오른쪽으로 |
|   7  |      <     |                               관계 연산자(보다 작은)                              | 왼쪽에서 오른쪽으로 |
|      |     <=     |                             관계 연산자(보다 작거나 같은)                            | 왼쪽에서 오른쪽으로 |
|      |      >     |                               관계 연산자(보다 큰)                               | 왼쪽에서 오른쪽으로 |
|      |     >=     |                             관계 연산자(보다 크거나 같은)                            | 왼쪽에서 오른쪽으로 |
|      | instanceof |                              인스턴스의 실제 타입 반환                              | 왼쪽에서 오른쪽으로 |
|   8  |     ==     |                               관계 연산자(와 같은)                               | 왼쪽에서 오른쪽으로 |
|      |     !=     |                              관계 연산자(와 같지 않은)                             | 왼쪽에서 오른쪽으로 |
|   9  |      &     |                                비트 AND 연산자                                | 왼쪽에서 오른쪽으로 |
|  10  |      ^     |                                비트 XOR 연산자                                | 왼쪽에서 오른쪽으로 |
|  11  |     \|     |                                 비트 OR 연산자                                | 왼쪽에서 오른쪽으로 |
|  12  |     &&     |                                논리 AND 연산자                                | 왼쪽에서 오른쪽으로 |
|  13  |    \|\|    |                                 논리 OR 연산자                                | 왼쪽에서 오른쪽으로 |
|  14  |     ? :    |                                 삼항 조건 연산자                                | 오른쪽에서 왼쪽으로 |
|  15  |      =     | 대입 연산자 및 복합 대입 연산자 (=, +=, -=, \*=, /=, %=, <<=, >>=, >>>=, &=, ^=, \|=) | 오른쪽에서 왼쪽으로 |

### 우선순위 연습하기

<figure><img src="https://1460556410-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3hxjcsx6VFJEpkIV3dzZ%2Fuploads%2FJlQz4nFgixdnmMhBZEkH%2Fimage.png?alt=media&#x26;token=9da44a64-aa1f-48c5-8d29-1bcb02766908" alt=""><figcaption></figcaption></figure>

{% code lineNumbers="true" %}

```java
class Operator1_1 {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;

        // + 연산자는 피연산자가 2개인 이항 연산자 임으로 단항 연산자인 -x 의 -가 먼저 실행된다.
        System.out.print("-x + 3 = ");
        System.out.println(-x + 3); // -10 + 3 = -7

        System.out.print("x + 3 * y = ");
        System.out.println(x + 3 * y); // 10 + (3 * 20) = 70

        System.out.print("x + 3 > y - 2 = ");
        System.out.println(x + 3 > y - 2); // false
        System.out.print("x + 3 < y - 2 = ");
        System.out.println(x + 3 < y - 2); // true

        System.out.print("x > 3 && y < 2 = ");
        System.out.println(x > 3 && y < 2); // false

        int result = x + y * 3;
        System.out.println("result = " + result); // 10 + (20 * 3), result = 70
    }
}
```

{% endcode %}

## 연산자의 결합규칙

> ### 우선순위가 같은 연산자가 있을 때, 어떤 것을 먼저?
>
> #### = > 3 + 4 - 5  -> (3 + 4) - 5
>
> * 기본적인 계산 순서는 왼쪽에서 오른쪽
> * <mark style="color:blue;">대입과 단항 연산자일 경우 오른쪽에서 왼쪽</mark>

## 3줄 요약

> ### 1. 산술 > 비교 > 논리 > 대입 : 대입은 제일 마지막에 수행됩니다.
>
> ### 2. 단항(1) > 이항(2) > 삼항(3) : 단항 연산자의 우선순위가 제일 높습니다.
>
> ### 3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽입니다.

{% hint style="info" %}
Ref. Java의 정석 기초편 Chapter3(1, 2, 3, 4)

Ref. [연산자와피연산자](https://www.youtube.com/watch?v=j5zmf0_suDE\&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp\&index=23), [우선순위와결합규칙](https://www.youtube.com/watch?v=sKs_dbia2fA\&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp\&index=24)
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nbcamp.gitbook.io/java-handbook/part-02..md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
