변수란 무엇일까요
다른 프로그래밍 언어도 비슷하게 변수란 메모리에 값을 기록하기 위한 공간입니다.
메모리의 공간의 활용을 위한 도구로 메모리 공간의 할당과 접근을 위해 사용됩니다.
쉽게말해 내가 사용가능한 메모리(RAM)중에서 일부분을 내가 쓴다고 선언을 하는것입니다.

그럼 자바에서 변수를 어떻게 사용할까요
int num1; //변수 num1을 사용한다고 선언
int num2; //변수 num2를 사용한다고 선언
<자료형> 변수명 형식으로 변수를 선언합니다.
변수의 이름을 정할때도 규칙이 있는데요.
규칙은 아래와 같습니다.
자바는 대소문자를 구분
변수의 이름은 숫자로 시작할수 없다
$와 _이외의 특수문자는 변수의 이름에 사용불가
키워드, 예약어는 변수의 이름에 사용불가
예약어는 아래와 같습니다.

그럼 변수의 이름을 짓는법도 알았겠다. 변수를 대입해봐야겠죠?
수학에서 '='은 같다 라는 의미로 쓰이지만 프로그래밍에서는 왼쪽에 오른쪽 값을 대입하라는 뜻입니다.
말로만 하면 이해하기 힘드니 실전으로 넘어가면
int age = 10;
int num;
num = 10;
이 식들은 무슨 뜻이냐 하면...
'정수형 변수 age에 10을 대입하라'는 뜻으로 해석할 수 있죠.
또한 첫째 줄처럼 변수를 선언과 동시에 값을 대입 할수도 있고
두,세 번째줄 처럼 선언을 하고 값의 대입도 나중에 할수 있습니다.
심화로 넘어가자면
String str1;
str1 = new String("Hello")
String str2 = new String("Hello");
str1과 str2는 같은 값일까요?
정답은 '다르다'입니다.
왜 그럴까요?
이유는 String은 주소값을 가리키는데 str1과 str2이 값은 같지만 주소값이 다르기 때문입니다.
실제 주소값은 다르겠지만 예를 들자면 아래와 같습니다.

쉽게 말해 같은 이름의 김철수 2명이 각각 서울과 부산에 사는것과 같습니다.
값은 같지만 주소가 다르다는 뜻입니다.
그럼 String변수는 값을 비교하지 못하나?
이것 또한 아닙니다.
이러한 경우를 대비해서 .equals()를 이용하여 비교를 합니다.
코드로는 아래와 같습니다.
System.out.println("str1 == str2 : " + str1.equals(str2));
//결과 = str1 == str2 : true
그럼 다음으로 넘어가서 변수 사용 목적은 무엇일까요?
변수를 사용하면 가독성이 좋아지고 코드의 재사용성 증가로 코드량이 감소하고 유지보수가 용이해집니다.
System.out.println(2 * 3.141592653589793 * 10);
System.out.println(3.141592653589793 * 10 * 10);
System.out.println(3.141592653589793 * 10 * 10 * 20);
System.out.println(4 * 3.141592653589793 * 10 * 10);
위와 같이 쓰기 힘든 숫자를 변수로 사용한다면 보기에도 불편하고 쓰기 매우 힘들거같습니다.
하지만 아래와 같이 변수를 활용하면 깔끔해집니다.
double pi = 3.141592653589793;
int r = 10;
int h = 20;
System.out.println(2 * pi * r);
System.out.println(pi * r * r);
System.out.println(pi * r * r * h);
System.out.println(4 * pi * r * r);
그럼 마지막으로 변수형에 대해서 알아보겠습니다.
많은 변수형이 존재하지만 자바에서 기본적으로 제공하는 변수 형을 원시 변수형이라고 합니다.
