java - 두 가지 데이터 타입
1. 기본 타입(Primitive Type)
- 기본 타입 int, double 변수에 값이 들어가는 타입이다.
- 기본 타입의 종류는 byte, short, char, int ,float, double, boolean이 있다.
- 기본 타입의 크기가 작고 고정적이기 때문에 메모리의 Stack에 저장이 된다.
- ex : int a = 1
long = 30L
double = 33.14
float = 20.14F
- 변수가 사용된 메소드가 종료되거나 사용된 객체가 사라질때 자동으로 파괴된다.
2. 참조 타입(Reference Type)
- new 키워드를 이용하여 객체를 생성하여 데이터가 생성된 주소를 참조하는 타입이다.
- 참조 타입의 데이터의 크기가 가변적이고 동적이기 때문에 동적으로 관리되는 Heap영역에 저장이 된다.
- String과 배열은 참조타입과 달리 new 없이 생성이 가능하지만 기본타입이 아닌 참조타입이다.
- ex : Object object = new Object();
Dog dog = new Dog();
- 더 이상 참조하는 변수가 없을 때 가비지 콜렉션에 의해 파괴된다.
추가적으로 기본 타입과 참조 타입 변환을 도와주는 랩퍼 클래스와 오토박싱에 대해 알아보자.
* 랩퍼 클래스
- 기본 타입을 참조 타입으로 바꿔주는 클래스를 랩퍼클래스(wrapper) 클래스라고 한다.
- 기본 타입을 참조 타입으로 바꾸면 데이터를 가공 하는 있는 메소드를 사용 할 수 있다.
예를 들어 int를 랩퍼 클래스 Integer로 바꾸면 int 값과 편리한 여러 메소드를 같이 쓸 수 있다.
- 자바 1.4버전까지는 랩퍼클래스를 제공했다. 자바 5부터는 Autoboxing(Boxing, Unboxing)을 제공한다.
<기본 타입과 랩퍼 클래스>
- ex : int i = 10;
Integer integer = new Integer(i); //wrapper class 생성
int j = integer.intValue();
* 오토박싱(Autoboxing)
- 자바 5에 추가된 기능이다. 자동으로 기본 타입을 참조 타입으로 만들어준다.
- 기존 래퍼 클래스를 이용시 형변환 작업을 반복적으로 해주었지만 오토박싱으로 통해 자동으로 형변환을 해준다.
- ex : int i = 10;
Integer integer = i; //Boxing
int j = integer; //Unboxing
- ex :
public class Autoboxing {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 10; i++){
list.add(i);
}
}
}
출처 - http://cafe.naver.com/javacircle/58853