본문 바로가기

Dev/Java

Java - Primitive Type / Reference Type

728x90

Primitive type은 우리가 흔하게 알고있는 int, float 등을 뜻한다. 

Reference type은 자료구조이다. Arruy, class , interface 등이 속한다. 다른 점은 value 자체를 가리키는 것과 달리 레퍼런스는 주소를 가리키는 포인터형식이다. 

Java 에는 포인터가 없다. 그러나 포인터가 없다는게 사용자 입장에서 없다는거지 Java는 활발하게 사용중이다.

 

 컴퓨터구조적으로 들어가면 벨류는 스택에서 관리된다. 그러나 Reference들은 크기를 가변적으로 할당해줘야하기 때문에 동적 메모리 Heap에 저장된다.

 이러한 형태로 포인터값들이 힙의 값을 가리키고 있다.

 

Runtime Data Area : 런타임에 저장되는 데이터들. 컴파일타임에 정해지지 않고 런타임에 정해지기 때문에 Dynamic 이라고도 할 수 있다.

 

- Method, Heap, Stack Area

 

레퍼런스들의 비교법

레퍼런스 변수는 겉으로보이는 값이 아닌 Pointer로서 주소를 가리키고 있다. 때문에 일반적인 == 연산으로는 원하는 값이 안나올 수 있다.

 

public class SoftwareProject {
    public static void main(String[] args) {
        int[] arr1;
        int[] arr2;
        int[] arr3;
        arr1 = new int[] { 1, 2, 3 };
        arr2 = new int[] { 1, 2, 3 };
        arr3 = arr2;
        System.out.println(arr1 == arr2);
        System.out.println(arr2 == arr3);
    }
}

 

 이 코드의 결과는 false true 이다. 

값이 같다고 true가 나오지 않는다. 가리키는 주소가 같아야 true가 나온다.