이번 포스팅에서는 Java의 데이터 타입에 대한 내용들을 살펴보려 한다.
먼저, Java에 존재하는 데이터 타입을 보자.
Java의 데이터 타입은 기본적으로 기본 타입(Primitive type)과 참조 타입(Reference type) 2가지로 나뉜다.
기본 타입은 우리가 흔히 알고 있는 int형, char형, double형... 등을 나타내는데 Java에는 총 8개의 기본 타입이 존재한다.
- 기본 타입(Primitive type)
boolean(1bit)
char(2byte)
byte(1byte), short(2byte), int(4byte), long(8byte)
float(4byte), double(8byte)
기본 타입은 총 4개의 타입으로 분류되는데 논리 타입, 문자 타입, 정수 타입, 실수 타입이 있다.
정수 타입에서 int형은 4byte로 총 32개의 bit로 숫자를 표현할 수 있다.
범위는 약 -21억(-2147,483,648) ~ 21억(2147,483,647)으로 나타낼 수 있다.
정수나 실수 타입 자료형들을 사용할 때는 "수의 범위"를 고려해야 하는 것을 잊지 말자.
추가로, 기본 타입에서 혼동이 있을 수 있는 부분으로 문자열(String)이 있다.
문자열(String)은 기본 타입의 문자형(char)와 달리 참조 타입(Reference type)으로 Java의 String 클래스로 나타낼 수 있다.
다음으로 참조 타입(Reference type)에 대해 간략하게 알아 보자.
참조 타입은 일반적으로 배열과 클래스, 인터페이스로 생성된 객체의 주소를 참조하는 자료형을 의미한다.
참조 타입을 이해하기 위해서는 각 자료형(기본형, 참조형)들로 선언된 변수들이 메모리 상에서 어떻게 저장되는지 이해할 필요가 있다.
그러나, 이번 포스팅에서 다루기엔 내용이 길어져 다음 포스팅에서 다뤄보려고 한다.
마지막으로 타입 변환(Tpye Casting)에 대해 알아 보자.
이번 포스팅에서는 기본 타입을 위주로 다루고 있기 때문에 타입 변환 또한 기본 타입 간의 변환을 다뤄보려고 한다.
타입 변환은 자동 타입 변환과 강제 타입 변환으로 나뉜다.
- 자동 타입 변환
작은 타입에서 큰 타입으로 변환이 이루어질 때를 나타낸다.
작은 타입이란 메모리 상에서 차지하는 크기가 상대보다 작은 것을 의미하고
큰 타입은 메모리 상에서 차지하는 크기가 상대보다 큰 것을 의미한다.
다음 코드를 보자.
long x = 10;
위 코드에서 10은 int형(4byte)으로 long형(8byte)으로 선언된 변수 x에 자동 타입 변환이 이루어지는 것을 볼 수 있다.
여기서, 작은 타입은 "10"을 큰 타입은 "x"를 나타낸다.
자동 타입 변환이 가능한 이유는 작은 타입의 데이터를 큰 타입으로 변환한다고 해서 데이터의 손실이 발생하지 않기 때문이다.
쉽게 말해, 작은 그릇에 담겨 있던 물을 큰 그릇에 옮긴다고 해서 물의 양이 줄어들지 않는 것을 생각하면 된다.
자동 타입 변환이 일어나고 있는 예시들을 보자.
double x = 10.0 + 30; // x = 40.0
double x = 10.0/2; // x = 5.0
System.out.println(10 + 5.0); // 출력: 15.0
System.out.println(10/20.0); // 출력: 0.5
System.out.println(10/20); // 출력: 0
참고로, "20.0"이 float형인지 double형인지 구분하는 방법으로 float형인 경우 "20.0f"와 같이 마지막에 'f'를 붙이고 double형은 붙이지 않는 것으로 판단할 수 있다.(추가 - int형과 float형 간의 변환은 float형으로 이루어 진다.)
다음으로 강제 타입 변환에 대해 알아 보자.
강제 타입 변환은 자동 타입 변환의 반대 개념으로 생각하면 된다.
- 강제 타입 변환
큰 타입에서 작은 타입으로 변환이 이루어질 때를 나타낸다.
자동 타입 변환과 다른 점으로 코드 작성 시 사용자가 직접 변환하려는 형을 명시해 주어야 한다는 것이다.
다음 코드를 보자.
int x = (int)10.5; // x = 10
System.out.println(10/(int)20.0); // 출력: 0
위와 같이 사용자가 직접 명시해야 하는 이유는 강제 타입 변환의 경우 데이터 손실이 발생하기 때문이다.
앞서 설명한 예시와 같이 큰 그릇에 담겨 있던 물을 작은 그릇에 옮기는 경우 물의 양이 줄어들게 되는 것을 생각하면 된다.
마지막으로 강제 타입 변환이 일어나는 상황을 그림으로 보자.
8byte의 공간에 저장되어 있던 값 340이 4byte의 공간에 저장되면서 값이 손실되는 것을 볼 수 있다.