변수
- 변수란 데이터를 저장하기 위해 프로그램에 이름을 받아 할당된 공간
- 자바에는 8개의 기본형 변수(byte, short, int, long, float, double, char, boolean)와 이를 바탕으로 새로 만들어 사용하는 변수인 참조형 변수가 있음
- 변수의 이름을 작성할 때는 영어, 숫자, _, $ 기호로만 작성할 수 있으며, 변수 이름 시작부분에 숫자를 사용하거나, 예약어와 중복되서는 안됨
- 변수를 선언할 때 값을 반드시 바로 할당해야하지는 않음
int num;
System.out.println(num);
num = 20;
System.out.println(num);
- 여러개의 변수를 동시에 선언하고 초기화 할 수 있지만, 이미 선언된 여러개의 변수를 동시에 초기화할수는 없음
int num1, num2;
float num3 = 1.23, num4 = 4.56;
num1 = 1, num2 = 2
상수
- 변수와 마찬가지로 데이터를 저장하는 메모리 공간이지만, 프로그램이 실행되는동안 메모리에 저장된 데이터를 변경할 수 없음
- 상수를 선언할 때는 final 키워드를 사용해 선언
final int NUMBER = 10;
리터럴
- 변수 등을 선언할 때 나오는 그 자체의 값을 의미함
int var = 30;
final int AGES = 100;
- float타입의 경우 실수형 리터럴을 그대로 사용하면 리터럴을 doble로 인식하며, 정수형 리터럴의 경우는 int로 인식을 하게 됨
- 특정 타입으로의 인식을 명확하게 하기 위해서는 리터럴 뒤에 리터럴 타입 접미사를 사용해야함
long literalOne = 123456789l
float literalTwo = 1.23456f
double literalThree = 2.34567890d
기본타입
- 자바에서 미리 정의된 기본 타입은 정수형 타입인 byte, short, int, long, 실수형 타입인 float, doble, 문자형 타입인 char, 그리고 논리형 타입인 boolean으로 구성되어 있음
- 정수형 타입 byte, short, int, long은 각각 1바이트, 2바이트, 4바이트, 8바이트의 데이터 표현이 가능함
값 범위를 벗어나면 오버플로우가 일어남에 유의
byte num1 = 25;
short num2 = -12800;
int num3 = 123883039;
long num4 = 1728728394058302;
- 실수형 타입으로는 32비트 표현식인 float, 64비트 표현식인 double이 있음
float의 경우 (3.4 X 10^-38) ~ (3.4 X 10^38)의 숫자를, double의 경우 (1.7 X 10^-308) ~ (1.7 X 10^308)사이의 숫자를 표현 가능
- 문자형 타입으로는 char가 있으며, c, c++에서와 다르게 유니코드를 사용해 문자를 표현함
- 논리형 타입으로는 참, 거짓을 나타내는 boolean이 있음
실수의 표현
- 실수를 표현하는 방법으로는 고정 소수점 방식과, 부동 소수점 방식이 있음

- 고정 소수점은 우리가 소수를 표현하듯 정수부와 소수부를 나누어 소수를 표현하는 방법을 의미함
각 자리수에 사용할 수 있는 바이트 수가 줄어들어 일반적으로는 사용하지 않음


- 부동 소수점 표현 방식은 숫자를 가수부와 지수부로 나누어 더 큰자리의 소수까지도 표현할 수 있게 하는 방법임
- 공식은 아래와 같음
(-)(1.가수부) * 2^(지수부 - 127)
- 고정 소수점 표현방법에 비해 더 많은 자리수를 표현 가능하지만, 10진수를 정확하게 표현하는것이 불가능해지는 단점이 있음
double num = 0.1;
for(int i = 0; i < 1000; i++) {
num += 0.1;
}
System.out.print(num);
타입 변환
- Java에서는 boolean형을 제외한 나머지 기본 타입간에 타입변환이 자유로움
- 대입이나 산술 연산에서 타입이 다를 경우 컴파일러가 자동으로 타입을 변환시켜주는 것을 묵시적 타입 변환이라고 하며, 데이터 손실이 일어나지 않는 한 자동으로 타입을 변환시켜 주게 됨
double num1 = 10;
double num3 = 7.0f + 3.14;
byte num1 = 100;
byte num2 = 200;
int num3 = 9876543210;
long num4 = 9876543210;
float num5 = 3.14;
int num6 = 9876543210L;
long num7 = 9876543210L;
- 명시적인 타입 변환이 필요할 경우 타입 캐스트 연산자를 사용
int num1 = 1, num2 = 4;
double result1 = num1 / num2;
double result2 = (double) num1 / num2;
System.out.println(result1);
System.out.println(result2);
출처:
http://www.tcpschool.com/java/java_datatype_variable