
📂변수(variable)
하나의 값을 저장할 수 있는 메모리 공간(RAM)
어렵다면 " 물건을 담을 수 있는 상자 " 라고 생각해보자.
🔎상황 1. 핸드폰을 팔기로 했다. 핸드폰을 구매자에게 배송해야하는데 배송하기 전 포장에 단계에서 어떤 상자를 고를지 골라야한다. 그렇다면 당신은 두손에 들어오는 크기의 핸드폰을 냉장고나 들어갈 법한 상자에 포장을 할 것인가?
적당한 크기의 상자에 담는 것이 정상이다.
🔎상황 2. 냉동 식품을 포장하고자한다. 장시간 이동을 해야하며 이때 선택할 수 있는 선택지 중 제일 좋은 것은 보냉이 되는 포장용기에 하는 것이 가장 좋은 선택일 것이다.
이렇게 우리는 일상생활에서도 자연스럽게 적합한 용기 및 포장 방식을 택하고 물건을 담는다.
Java에서 변수도 그렇다.
값을 저장하기 위해 저장하고자하는 값에 걸맞는 타입을 선택해야한다.

내가 숫자 중 "정수"를 저장하고자 한다면 "정수"에 맞는 변수 타입을(상자)를 선택해야하며 저장하고자 하는 정수의 크기에 따라 상자의 크기를 선택하면 된다.
"실수"를 저장하고자 한다면 "실수"에 맞는 타입, 문자라면 문자에 맞는 타입을 선택하면 된다.

int year = 2024;
System.out.println("올해:" + year);
2024 라는 숫자를 담기위해 정수형 int 타입 을 선택하고 변수명을 "year
"이라 짓고 값을 넣어줬다.
그 후 출력하는 메소드를 통해 "올해 : 2024" 라는 결과를 출력할 수 있다.
분명 나는 올해 : year 이라고 작성했지만 year은 int year = 2024; 라는 초기화 과정을 통해 year 이라는 변수는 2024라는 값을 가지고있다.
그래서 컴퓨터에서는 올해 : year을 올해 : 2024로 출력하는 것이다.
쉽게 이해하자면 이런 과정이지만 더 좋은 개발자가 되기 위해선 이것보다 세부적으로 컴퓨터의 시점에서 이해를 해야한다.
심화(처음이면 건너뛰기)

JVM이란 자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어
[출처 : https://blog.naver.com/chlwlstjd10/222239136195 ]
클래스 로더는 .class 파일을 묶어서 JVM이 운영체제로부터 할당받은 메모리 영역인 Runtime Data Area로 적재한다.
런타임 데이터 영역 (Runtime Data Area)
런타임 데이터 영역은 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
앞서 변수에 저장한 값은 런타임 데이터 영역에 저장되어 있다가 클래스 로더가 클래스 파일을 로드하는 과정에서 저장된 변수 값을 가져오게 된다.
사용자 실행(run) -> 컴파일러가 클래스 파일로 변환 -> 클래스 로더가 클래스 파일을 메모리에 로딩하고, JVM이 이를 실행한다
JVM에서 실행되어 그 안에 있는 시스템 호출이 이루어지면서 우리에게 보여지게 되는 것이다.
시스템호출 예시) System.out.println()
자료형 사용 예시
byte age = 25;
short year = 2023;
int population = 1000000;
long universeAge = 13800000000L; // L을 붙여 long형임을 명시
float pi = 3.14f; // f를 붙여 float형임을 명시
double avogadro = 6.02214076e23;
char initial = 'A';
boolean isJavaFun = true;
// 변수 선언
int num; // 정수형 변수 num 선언
double price = 19.99; // 실수형 변수 price 선언과 초기화
// 변수 값 할당
num = 10;
price = 29.99;
// 변수 사용
System.out.println("숫자: " + num);
System.out.println("가격: $" + price);
// 연산
int result = num + 10;
System.out.println("결과: " + result);
컴퓨터는 왼쪽에서부터 한 줄 한 줄 읽기 때문에
int box;
System.out.println("변수는: " + box);
box = 100;
**Error**
왼쪽에서부터 읽어보자.
int 타입이라고 선언 후 변수 명을 box로 지었음 int타입의 box라는 이름의 메모리를 할당 -> 공간은 만들어둿지만 아직 값은 할당받지 못했음.box가 읽힘 box를 읽은 컴퓨터는 box라는 변수가 있나 찾아봄. 그러나 box라는 공간은 찾았으나 값이 없음. 컴퓨터는 가져오지못했고 이 과정에서 에러 발생. --여기서 종료 --box = 100; 이 3번 째 줄에 나왔으나 이미 2번째 줄에서 오류로 인해 진행하지 못했음. 🖥연산자(Operator)
import java.util.Scanner;
Scanner input = new Scanner(System.in);
System.out.println("비교할 첫 번째 숫자를 입력하시오");
int num1 = input.nextInt();
System.out.println("비교할 첫 번째 숫자를 입력하시오");
int num2 = input.nextInt();
System.out.println("** 두 숫자를 비교하겠습니다 **");
boolean result1 = num1 == num2;
boolean result2 = num1 > num2;
boolean result3 = num1 < num2;
boolean result4 = num1 >= num2;
boolean result5 = num1 <= num2;
boolean result6 = num1 != num2;
System.out.println("입력한 숫자가 같은지 확인하겠습니다. : " + result1);
System.out.println("첫 번째 입력한 숫자가 더 큰 숫자인지 확인하겠습니다.: " + result2);
System.out.println("첫 번째 입력한 숫자가 더 작은 숫자인지 확인하겠습니다.: " + result3);
System.out.println("첫 번째 입력한 숫자가 크거나 같은지 확인하겠습니다.: " + result4);
System.out.println("첫 번째 입력한 숫자가 작거나 같은지 확인하겠습니다.: " + result5);
System.out.println("입력한 두 숫자가 다른지 확인하겠습니다.: " + result6);
연산자를 이용하여 변수끼리 간단한 비교를 할 수 있으며 추후 조건문이나 반복문 등에서 굉장히 많이 사용된다.
논리연산자 사용예시
// 논리연산자
// or 연산자, 둘 중 하나라도 true 이면 true 반환.
boolean ggg = 1 > 2 || 2 == 2;
System.out.println(ggg);
// and 연산자, 둘 다 true여야 true를 반환
boolean hhh = 1 > 2 && 2 == 2;
System.out.println(hhh);
// xor 연산자, 둘 중 하나만 true이여야 true를 반환.
boolean iii = 1 > 2 ^ 2 == 2;
System.out.println(iii);