# 논리 연산

## 논리 연산

이 문서에서는 `논리 연산`에 대해서 살펴본다.

### 논리 연산이란

논리 연산은 **논리와 논리 간의 연산**을 말한다. 즉, **여러 판정 값들을 이용하여 최종 판정을 내리는** 연산이라고 볼 수 있다.

### 논리 연산자

논리 연산자의 종류는 다음과 같다.

| 연산자  | 설명        |
| ---- | --------- |
| &&   | 논리 AND 연산 |
| \|\| | 논리 OR 연산  |
| !    | 논리 NOT 연산 |

### 논리 연산자 데모 1

```java
import java.lang.*;

public class LogicalOperatorExample1 {
    public static void main(String[] args){
        int age = 15;
        
        boolean teen = age >= 14 && age < 20;
        
        System.out.println("청소년인가요?");
        System.out.println(teen);
    }
}
```

위의 예제를 실행하면 다음과 같은 결과가 나온다.

```
청소년인가요?
true
```

청소년의 기준을 **14살 이상 20살 미만**이라고 했을 때 다음과 같이 표시할 수 있다.

![](/files/-MeNSRDdVI14_rgdsFBS)

이는 한 번의 비교로 불가능하기 때문에 두 번으로 나누어서 진행해야 한다.

1. 나이가 14살 이상인가?
2. 나이가 20살 미만인가?

1번과 2번 모두를 만족해야 하므로 논리 AND 연산을 수행해야 한다.

* 나이가 14살 이상 그리고 20살 미만인가?

논리 연산은 대화하는 방식과 유사하기 때문에 말로 먼저 정리한 뒤 코드로 옮기는 것이 작성하기에 유리하다.

> 논리 AND 연산 진리표

| A     | B     | A && B |
| ----- | ----- | ------ |
| true  | true  | true   |
| true  | false | false  |
| false | true  | false  |
| false | false | false  |

### 논리 연산 데모 2

```java
import java.lang.*;

public class LogicalOperatorExample2 {
    public static void main(String[] args){
        int age = 21;
        
        boolean isFree = age < 8 || age >= 65;
        
        System.out.println("지하철 요금이 무료인가요?");
        System.out.println(isFree);
    }
}
```

실행 후 출력 결과는 다음과 같다.

```
지하철 요금이 무료인가요?
false
```

지하철 무임승차 기준이 **8세 미만 65세 이상**이라고 했을 때 그림으로 표시하면 다음과 같다.

![image.png](http://www.sysout.co.kr/file/image/1346)

한 번에 비교로 파악할 수 없기 때문에 두 번 비교를 수행해야 한다.

1. 나이가 8세 미만인가?
2. 나이가 65세 이상인가?

1번과 2번을 동시에 만족할 수 없다. 따라서 논리 OR 연산이 필요하다.

* 나이가 8세 미만 또는 65세 이상인가?

> 논리 OR 연산 진리표

| A     | B     | A \|\|B |
| ----- | ----- | ------- |
| true  | true  | true    |
| true  | false | true    |
| false | true  | true    |
| false | false | false   |

### 논리 연산 데모 3

```java
import java.lang.*;

public class LogicalOperatorExample2 {
    public static void main(String[] args){
        int age = 21;
        
        boolean isFree = !(age >= 8 && age < 65);
        
        System.out.println("지하철 요금이 무료인가요?");
        System.out.println(isFree);
    }
}
```

2번 예제와 동일하게 실행되는 예제이다. 차이점은 `isFree`를 계산하는 방식에 있다.

평소에 하는 대화와 연결지어 생각하면 이해하기 쉽다.

$$
무료이다 = 유료가 아니다
$$

무료 아니면 유료라고 했을 때, 무료라는 것은 유료가 아니라는 것과 같은 의미를 가진다. 따라서 식에 부정 연산을 섞어서 반대의 의미를 가지게 할 수 있다.

```java
//다음 두 식은 같은 식이다.

boolean isFree = !(age >= 8 && age < 65);

boolean isFree = age < 8 || age >= 65;
```

논리를 반대로 뒤집어서 연산시키는 연산자를 논리 부정(NOT) 연산자라고 부르며, `!`를 앞에 붙여 표시한다. 논리 부정 연산자는 단항 연산자이다.

> 논리 부정 연산 진리표

| A     | !A    |
| ----- | ----- |
| true  | false |
| false | true  |


---

# 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://docs.sysout.co.kr/base-language/java/beginner/operator/logical-operator.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.
