Skip to content

Latest commit

 

History

History
40 lines (25 loc) · 1.94 KB

File metadata and controls

40 lines (25 loc) · 1.94 KB

원시 타입과 참조 타입

원시 타입

정수, 실수, 문자, 논리 리터럴 등 실제 데이터 값을 저장하는 타입입니다.

int a = 10;
  • a라는 이름의 메모리 공간이 스택 영역에 생성되며, 10이라는 값을 가집니다.

boolean, char, byte, short와 같이 int보다 작은 자료형의 값을 계산하는 경우 JVM의 피연산자 스택이 4 bytes이기 때문에 int형으로 자동 형 변환됩니다.

참조 타입

기본 타입을 제외한 타입으로, 객체의 주소를 저장하는 타입입니다.

Person p = new Person();
  • p라는 이름의 메모리 공간이 스택 영역에 생성됩니다.
  • 참조 변수인 p는 힘 영역에 생성된 인스턴스의 주소 값을 가집니다.

원시 타입 vs. 참조 타입

  • 참조 타입은 최소 2번의 메모리 접근이 필요하며, 일부 타입의 경우 언박싱 과정이 필요하기 때문에 비교적 성능이 떨어집니다.
  • 원시 타입에 비해 참조 타입이 사용하는 메모리 양이 많습니다.
  • 원시 타입은 null을 담을 수 없지만, 참조 타입은 null을 담을 수 있습니다.
  • 원시 타입은 제네릭 타입에서 사용할 수 없습니다.

🤔 제네릭 타입에 원시 타입을 사용할 수 없는 이유?

JDK 1.5부터 도입 된 제네릭은 하위 호환성을 위해 타입 소거(Type Erasure) 방식을 사용하고 있습니다. 따라서 가상의 타입을 지정하더라고 컴파일 시점에는 컴파일러가 이를 Object 타입으로 변환하는 타입 소거 과정이 일어나기 때문에 제네릭 타입으로 들어오는 타입은 무조건 Object를 상속받아야 합니다. 원시 타입의 경우 Object의 하위 타입이 아니기 때문에 사용할 수 없습니다.

참고 자료