자바의 자료형은 크게 두가지로 나뉜다.
Primitive(기본형) / Reference(참조형)

자바에서 메모리상의 관리를 편하게 하고,
객체의 주소값을 넘겨주는 등 사용이 편하기 위해 두가지를 정의하고 있다.

둘의 가장 큰 차이점은 '데이터의 크기가 결정되어 있느냐'
그렇지 않다면 '주소값을 이용한다.'이다.
즉, primitive는 데이터를 곧바로 저장하며
reference는 주소값을 저장한다는 것이다.(C의 포인터)
이점을 생각하며 다시 한번 살펴보자.


Primitive
기본형으로 C언어에서도 많이 사용된다.
데이터의 크기가 결정되어 있는 것이 특징이다.

1 byte

2 byte

4 byte

8 byte

정수

byte

short

int (default)

long

실수

float

double (default)

문자

char

논리

boolean


※문법 : data type의 첫글짜가 소문자이다.


Reference
참조형으로 주소값을 저장하고 있다.
객체를 만들었을때 값을 갖고있는 메모리를 참조한다.
(배열에서도 사용)

대표적인 reference형으로 String을 생각해볼 수 있다.
(String은 단순 값만 저장하는 것이 아니라,
메소드도 갖고 있는 객체이다.)
그 외에도 사용자가 만든 클래스도 모두 reference 형이다.


메모리상의 비교
그렇다면 왜 굳이 두개의 datatype을 따로 분리하고 사용하는걸까?
객체는 다양한 datatype을 멤버로 갖고 있게 할 수 있는데
이 특징을 표현하려면 primitive는 한정적이다.
메모리를 통해 살펴보면 더 이해가 쉽다.



그림 왼쪽은 primitive 오른쪽은 reference의 메모리 형태이다.

primitive의 메모리는 int a = 5; 를 메모리 상에 표현한 것이다.
a의 값이 스택에 직접 들어가 직접적으로 접근하는 것을 볼 수 있다.

반면, String s = "아이유"; 를 표현한 reference를 살펴보자.
s에는 주소값만 저장하고 있으며,
실질적인 값은 힙영역에 저장하여
주소값을 통하여 접근하도록 되어있다.

1) 이는 지역적으로 사용되어 변동이 심한 스택과 다르게
값이 유지되는 힙영역을 이용하여 객체를 다루도록 한 것을 볼 수 있다.
2) 두번째로, "아이유"라는 문자열 외에 아이유의 나이도 집어넣을 경우가 생길 경우,
int 형을 이용하게 되는데, 객체를 "참조"함으로써 그 값을 유지할 수 있다.

'Software > Java' 카테고리의 다른 글

Class  (0) 2013.07.04
[JAVA] package 란?  (0) 2013.07.04
Java의 변수 타입  (0) 2013.07.04
[과제]1 ~ 9 까지 int 형식으로 입력 받아서 해당하는 단을 출력  (0) 2013.07.04
Java의 기초  (0) 2013.07.04
Posted by MegaNzine
,