# 자료와 정보

## 데이터와 변수

이 문서에서는 `데이터`, `정보`, 그리고 `변수`에 대해서 다룬다.

### 자료(Data)

프로그램의 목적은 `계산`이다. 계산을 하기 위해서는 `값`이 필요하며, 추상적인 값보다 구체적인 값이 필요하다.

다음은 추상적인 값들의 예시이다.

* 맛있다
* 기분이 좋다
* 비가 올 것 같다
* 공기가 깨끗하다
* 분위기 있다

추상적인 값들은 프로그래밍에서 계산할 수 없다. 사람마다 느끼는 정도가 다르며, 수치로 나타낼 수 없기 때문이다.

다음은 구체적인 값들의 예시이다.

* 음식의 가격이 10000원이다
* 강수량이 25mm이다
* 미세먼지 농도가 20㎛이다
* 몸무게가 50kg이다
* 키가 180cm이다

이처럼 수치화가 가능하며, 측정이 가능한 값들을 자료(Data)라고 한다. 하지만 자료를 가지고는 단순한 확인밖에 할 수 없기 때문에 이를 계산을 통해 의미있는 내용으로 변화시켜야 하며, 이를 정보(Information)이라고 부른다.

### 정보(Information)

정보는 **자료를 가공하여 만들어낸 의미있는 결과**를 말한다.

다음은 자료의 예시이다.

* 1주일간 강수량 측정치
* 1주일간 매출액
* 1주일간 일일 공부시간
* 1주일간 미세먼지 농도 변화

다음은 정보의 예시이다.

* 온난화와 강수량 변화의 상관관계
* 전년도와 비교한 매출 변화 및 원인
* 나와 전교 1등의 공부 시간 분석 결과
* 이웃 나라와 우리 나라의 미세먼지 농도 차이

정보는 **의사 결정**을 수행하는데 도움을 주며, 정보의 신뢰성이 높을 수록 좀 더 합리적인 의사결정을 할 수 있다. 따라서 프로그램에서는 자료를 어떻게 수집하여 어떻게 계산할 것인지가 매우 중요한 요소가 된다.

### 자료의 형태

현실세계에서의 자료는 다양한 형태로 존재한다. 크기가 10이라고 해서 모두 같은 값이 아니라는 점에 유의해야 하며, 다음 예시를 통해 살펴본다.

| 값     | 분류 |
| ----- | -- |
| 10원   | 화폐 |
| 10유로  | 회폐 |
| 10달러  | 화폐 |
| 10g   | 무게 |
| 10kg  | 무게 |
| 10cm  | 길이 |
| 10km  | 길이 |
| 10L   | 부피 |
| 10평   | 넓이 |
| 10헥타르 | 넓이 |
| 10데시벨 | 소리 |
| 10Lux | 밝기 |

위에서 언급한 값들은 모두 10이라는 값을 가지고 있지만 다른 형태이다. 이를 형태별로 분류하면 다음과 같다.

| 분류 | 값               |
| -- | --------------- |
| 화폐 | 10원, 10유로, 10달러 |
| 무게 | 10g, 10kg       |
| 길이 | 10cm, 10km      |
| 부피 | 10L             |
| 넓이 | 10평, 10헥타르      |
| 소리 | 10데시벨           |
| 밝기 | 10Lux           |

다음과 같은 계산식이 있다고 가정해본다.

```
10원 + 10유로 = ?
```

우리는 위의 계산식을 계산할 수 있을까? 정답은 `할 수 있다`이다. 물론 있는 그대로는 안되고, 변환을 통해서 가능하다. 만약 환율이 1유로에 1500원이라면, 식은 다음과 같이 변할 수 있다.

* 10원 + 15000원 = ?
* 0.006 유로 + 10유로 = ?

이처럼 `같은 분류`의 값들은 서로 변환을 통해 계산이 가능하다는 것을 우리는 이미 알고 있다.

그렇다면 다음의 계산식을 살펴보자.

```
10g + 10cm = ?
```

위의 식은 계산이 가능한가? 정답은 `할 수 없다`이다. 다른 분류의 값은 어떠한 형태로도 계산이 불가능하다. 단위를 통일할 수 없기 때문이다. 우리는 이미 이러한 사실들을 알고 있으며, 이는 프로그래밍에서도 그대로 적용된다.

### 자바의 자료 형태

자바 뿐 아니라 프로그래밍 언어에서는 다음의 전제조건에 의해 데이터를 구분한다.

* 단위는 계산을 복잡하게 하므로 단위는 생략한다.
* 같은 분류의 값들은 변환을 통해서 계산할 수 있다.
* 다른 분류의 값들은 당연히 계산할 수 없다.
* 프로그래머는 이 사실을 반드시 알고 있어야 한다.

프로그램의 핵심 요소 중 하나는 `속도`이기 때문에 이를 위해 단위는 프로그래머에게 위임하도록 구성되어 있다. 따라서 모든 데이터의 단위를 배제하고 값 자체를 다음과 같이 분류한다.

| 분류  |    | 설명                         | 종류                     |
| --- | -- | -------------------------- | ---------------------- |
| 숫자  | 정수 | 소수점이 없는 숫자                 | byte, short, int, long |
| 숫자  | 실수 | 소수점이 있는 숫자                 | float, double          |
| 문자  |    | 번호가 부여된 글자(ASCII, Unicode) | char                   |
| 논리  |    | 예/아니오 처럼 두 가지 상태를 표현하는 값   | boolean                |
| 문자열 |    | 문장을 표현하는 값                 | String                 |
| 객체  |    | 복잡한 데이터를 표시하기 위한 값         | 사용자 정의 자료형             |

위의 표에 따라 다음 형태의 규칙이 성립하게 된다.

* 숫자끼리는 변환을 통해 계산이 가능하다.
* 그 외의 형태와는 분류가 다르므로 계산이 불가능하다.

우리에게 필요한 능력은 데이터를 봤을 때, 프로그래밍 자료형에서 어느 분류에 해당하는지 파악하는 능력이며 변수를 이용하여 실제 데이터를 저장하고 사용하는 과정은 다음 문서에서 다룬다.

### 예제

다음은 출력 명령을 이용한 간단한 예제이다.

```java
import java.lang.*;

public class SimplePrintExample {
    public static void main(String[] args){
        System.out.println(100);//정수
        System.out.println(3.14);//실수
        System.out.println(true);//논리
        System.out.println('A');//문자
        System.out.println("Hello");//문자열
        
        System.out.println(100 + 3.14);//숫자(정수,실수)의 계산
        System.out.println(5 + 'A');//숫자(정수,문자)의 계산
        //System.out.println("Hello" - 5);//문자열과 정수의 계산(오류 발생)
        //System.out.println(true + 2);//논리와 정수의 계산(오류 발생)
    }
}
```


---

# 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/data-and-information.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.
