데이터 타입의 분류
- 프로그램은 자료구조(데이터)와 알고리즘의 결합으로 이루어진다.
- Java의 데이터 타입에는 크게 기본타입(primitive type)과 참조타입(reference type)으로 분류된다.
기본 타입
기본 타입 | 메모리 사용 크기 | 저장되는 값 범위 |
byte | 1byte | -2^7 ~ (2^7 - 1) |
char | 2byte | 0 ~ (2^16 - 1), 유니코드 |
short | 2byte | -2^15 ~ (2^15 - 1) |
int | 4byte | -2^31 ~ (2^31 - 1) |
long | 8byte | -2^63 ~ (2^63 - 1) |
float | 4byte | (+/-)1,4E-45 ~ (+/-)3.4028235E38 |
double | 8byte | (+/-)4.9E-324 ~ (+/-)1.7976931348623157E308 |
boolean | 1byte | true, false |
참조 타입
- 기본 타입으로 선언된 변수는 실제 값을 스택영역에 변수 값으로 저장하지만, 참조 타입은 주소값을 갖게 된다.
- 힙 메모리 주소를 통해 객체를 참조한다는 뜻으로 참조 타입이라고 부른다.
메모리 할당
- 어떠한 변수를 선언하면 메모리가 할당된다.
- 변수를 선언하기 위해 할당되는 메모리로는 크게 스택과 힙이 있다.
스택 Stack
- 함수의 호출과 함께 지역 변수, 매개변수 등이 할당.
- 정렬된 방식으로 메모리가 할당되고 해제된다.
- 실제 값들이 저장되는 것.
힙 Heap
- 클래스 변수(혹은 인스턴스 변수)또는 객체 등이 할당된다.
- 우연하고 무질서하게 메모리가 할당된다.
- JVM이 가비지 컬렉터를 통해 메모리 해제를 관리한다.
예시 1
public void test() {
// Primitive Value
int x = 0;
float y = 3.14f;
boolean isTrue = true;
}
예시2
public void test() {
// Primitive Value
int x = 0;
float y = 3.14f;
boolean isTrue = true;
// Object : Reference type
String name = "new-pow";
String[] friends = new String[3];
friends[0] = "Kim";
friends[1] = "Lee";
friends[2] = "Shin";
}