▷ 자료형(Data Type)
변수가 데이터를 담는 그릇이라면 자료형은 그릇의 크기이다. 자료형에 따라 저장할 수 있는 값의 종류와 범위가 달라진다.
1. 기본형
정수형(byte, short, int, long), 실수형(float, double), 문자형(char), 논리형(boolean)으로 나뉜다.
1) 기본형의 종류
타입 | 할당되는 메모리 크기 | 기본값 | 저장되는 값의 번위 | |
---|---|---|---|---|
정수 | byte | 1 byte | 0 | -128 ~ 127 |
short | 2 byte | 0 | 32,768 ~ 32,767 | |
int | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수 | float | 4 byte | 0.0F | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 |
double | 8 byte | 0.0 | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 | |
논리 | boolean | 1 byte | false | true, false |
문자 | char | 2 byte(유니코드) | '\u0000' | 0 ~ 65,535 |
2) 기본형의 특징
① 비객체 타입으로 null 값을 가질 수 없다. (기본값이 정해져있다)
② 변수의 선언과 동시에 메모리를 생성한다.
③ 모든 자료형은 메모리의 스택(stack)에 저장된다.
④ 저장공간에 실제 값을 가진다.
3) 기본 자료형
① 아무 처리도 안하고 값만 있으면 기본적으로 인식하는 자료형
② Java에서 정수형은 int, 실수형은 double을 기본으로 인식
→ long, float를 사용하려면 값 저장할 때 이 부분을 명시해야 한다.
long, float 사용 예시)
// long 사용 예시
long value = 80L; // long을 사용하려면 뒤에 L을 붙여야 한다.
// float 사용 예시
float temp = 19.0F; // float를 사용하려면 뒤에 F를 붙여야한다.
2. 참조형
기본형을 제외한 모든 자료형으로 기본적으로 제공하는 클래스, 개발자가 만든 클래스, 열거 타입 등이 있다.
1) 참조형의 특징
① 참조형 변수는 null로 초기화할 수 있다.
② 실제값이 저장되지 않고 자료가 저장된 공간의 주소를 저장한다.
③ 메모리의 힙(heap)에 실제 값을 저장하고, 스택(stack)에는 참조값(주소값)이 저장된다.
3. 기본형과 참조형의 차이
// 기본형
int korScore = 80;
float tempF = 24.39F;
char laugh = 'ㅋ';
// 참조형
String laughString = "ㅋㅋ";
- 기본 자료형은 스택(stack) 영역에 변수와 변수의 값이 저장되고, 참조형의 경우 스택(stack) 영역에는 변수와 실제값을 가르키는 주소(참조값)가 저장되고 실제값은 힙(heap) 영역에 저장된다.
- 스택(stack) 영역에 주소값을 저장하며 참조하기때문에 참조형이라고 하는 것이다.
4. 참고
- 스택(stack) 영역은 밑에서부터 차곡차곡 데이터가 쌓이지만 힙(heap) 영역은 컴퓨터가 판단해서 괜찮은 위치에 데이터를 배치한다.
- 참조형 변수의 크기는 컴퓨터의 bit에 따라 결정된다. (32bit 컴퓨터 → 4byte, 64bit 컴퓨터 → 8byte)
- 1 byte = 8 bit
- RAM의 저장공간
- stack : 프로그램 종료시 자동 반납 → 수동 반납 불가능
- heap : 자동 반납되지 않음 → 개발자가 수동으로 반납 처리
(단, Java에는 GarbageCollection 기능이 있어서 별도로 반납하지 않아도 된다)
📝 참고
1) 참고한 포스팅
'프로그래밍 언어 > Java' 카테고리의 다른 글
자바(Java)의 형변환 (1) | 2023.12.05 |
---|---|
자바(Java)의 변수 (0) | 2023.10.25 |
자바(Java) 주석 및 출력문 (0) | 2023.10.10 |
자바(Java) 설치 및 환경변수 설정 (0) | 2023.02.20 |