변수는 데이터를 저장할 수 있는 메모리 공간을 의미한다. Java의 변수는 자료형(data type)에 따라 저장할 수 있는 데이터의 종류와 특징이 다르다.
자료형은 크게 다음과 같이 구분한다.
자료형을 구분하는 이유는 기본형과 참조형이 메모리에서의 값 저장 방식이 다르기 때문이다. 기본형 변수는 실제 값을 저장하는 반면, 참조형 변수는 실제 값이 저장되어 있는 주소를 값으로 갖는다.
기본 자료형은 8가지가 있으며, 이외의 모든 자료형은 참조 자료형이다.
8가지 기본 자료형이 차지하는 메모리의 크기와 저장할 수 있는 값의 범위는 아래의 표와 같다.
이때, 자료형의 종류와 크기 그리고 정수 자료형이 저장할 수 있는 값의 범위 정도는 기억해두면 좋다.
정수 자료형의 최솟값과 최댓값을 구하는 코드를 작성해보자.
public class Main {
public static void main(String[] args) {
System.out.println(Byte.MAX_VALUE); // 127
System.out.println(Byte.MIN_VALUE); // -128
System.out.println(Short.MAX_VALUE); // 32767
System.out.println(Short.MIN_VALUE); // -32767
System.out.println(Long.MAX_VALUE); // 9223372036854775807
System.out.println(Long.MIN_VALUE); // -9223372036854775808
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648
System.out.println((int)Character.MAX_VALUE); // 65535
System.out.println((int)Character.MIN_VALUE); // 0
}
}
기본 자료형은 메모리에 실제 값을 저장한다고 했다. 따라서 char a = 'A' 라는 코드는 메모리에 변수 a의 공간이 만들어지고, 그 안에 A 문자가 들어가야 할 것이다. 하지만 메모리는 1과0만 저장할 수 있기 때문에 문자를 기록할 수 없다.
그렇다면 Java의 char 타입은 문자를 어떻게 저장하는 것일까?
자바는 유니코드 표에 맞게 모든 문자를 정숫값으로 바꿔 저장하고, 출력할 때는 메모리에 저장된 정수에 해당하는 문자를 출력한다.
문자 'A'의 유니코드 값은 65이다.
char 자료형을 이용해서 정수를 문자로, 문자를 정수로 표현하는 코드를 작성해보자. 그리고 알파벳 A부터 Z까지 출력하는 코드를 작성해보자.
public class Main {
public static void main(String[] args) {
char ch = 'A';
System.out.println(ch); // A, println 이 ch의 타입 확인 -> 문자 타입 확인 후 '숫자를 아스키문자로' 출력
System.out.println((int)ch); // 65, 현재 코드에서는 ch를 int타입으로 봐! (강제 형 변환, type casting)
System.out.println((char)65); // A
System.out.println("----------------------");
// A~Z 출력
char ch2 = 'A';
for (int i = 0; i < 26; i++) {
System.out.println((char)(ch2 + i));
}
}
}