[JAVA] Primitive Type & Reference Type

JHJeong·2024년 3월 13일
0

Java에서 타입은 크게 Primitive Type과 Reference Type이 있다.
쉽게 말해서 Primitive Type은 실제 데이터 값을 저장하는 타입이고,
reference Type은 객체의 주소를 저장하는 타입이다.

Primitive Type

  • 기본 자료형
  • byte, short, int, long, float, double, boolean, char
  • 비객체 타입이기 때문에 null 값을 가질수 없다.
  • 실제 값을 저장하는 공간이므로 Stack 영역에 저장된다,
  • 추가적으로 java.lang.String 클래스를 통한 문자열에 대해서도 Literals 하게 지원한다.
    예를 들면
1. String s1 = "this is a string";
2. String s2 = new String("this is a string");

위와 같이 s1를 큰따옴표로 생성했을경우에는 literal하게 생성하게 되는데, 이 때는 String constant Pool에 저장된다. s2의 경우에는 new 연산자를 사용해서 heap 영역에 저장된다. 이 때 String constant Pool에 저장된 문자열은 재사용하게 할 수 있게 된다.

Reference Type

  • 참조 타입 자료형, 원시 자료형을 제외한 타입들(문자열, 배열, 열거, 클래스, 인터페이스 등등)
  • 참조 타입 변수는 자바에서 해당 객체의 주소를 저장하는 변수이다.
  • 빈 객체를 의미하는 null이 존재한다.
  • 실제 객체는 힙 영역에 저장되며, 참조 타입 변수는 스택 영역에 실제 객체들의 주소를 저장하여, 객체를 사용할 때마다 참조 변수에 저장된 객체의 주소를 불러와서 사용하는 방식이다. 참조하는 변수가 없으면 가비지 컬렉터가 제거한다.
public class A {
	public static void main(String[] args) {
    	B obj = new B();
    }
}

class B {
}

위 소스의 경우에는 클래스 B를 new 연산자를 이용해서 obj 참조 변수에는 B 객체의 주소가 저장된다.
obj 참조 변수는 스택 영역에 B 객체의 주소를 저장하고, 실제 B 객체는 힙 영역에 저장된다.
obj는 B객체의 주소가 저장 되기 때문에, B객체를 이용해서 B클래스의 메소드나 변수들을 사용할 수 있다.

Boxing / UnBoxing

Boxing : Primitive Type -> Wrapper 클래스(Reference Type)로 변환
Unboxing : Wrapper 클래스 -> Primitive Type으로 변환

Integer a = new Integer(3);
int b = 3;

Integer c = (Integer)b;		// Boxing
int d = (int)a;				// Unboxing

// 자동으로 된다.
int e = a;
Integer f = b;
profile
이것저것하고 싶은 개발자

0개의 댓글