-
[Data Structure] Primitive / Reference Type 의 차이Data Structure & Algorithm/Data Structure 2023. 10. 12. 21:52
자바 관련 책을 읽다보니 문득 int 와 Integer 의 차이가 명확하게 생각나지 않았다.
그래서 오늘은 int 와 Integer 의 차이가 무엇인지 찾아보려 한다.
📌 목차
- 자료형 ( Data Type ) - Primitive / Reference Type
- int 와 Integer 의 차이는?
📌 자료형 ( Data Type ) - Primitive / Reference Type
자료형 또는 데이터 타입이란 프로그래밍 언어에서 여러 종류의 데이터를 식별하는 분류를 뜻한다.
위의 자료 구조에서 찾아볼 수 있듯, 자료형 (Data Type)은 기본자료형 (Primitive Type) 과 참조자료형 (Reference type) 으로 나뉘어져 있다.
더 상세하게 기본 자료형은 문자형, 정수형, 실수형, 논리형으로, 참조 자료형은 스트링/래퍼 클래스형, 인터페이스형, 배열형으로 나뉘어져있다.
⚡Primitive Type (원시 타입)
- 변수에 값 자체를 저장하는 자료형이다.
- 반드시 사용하기 전에 선언되어야 한다.
- 비객체 타입이기 떄문에 Null 값을 가질 수 없다.
- 실제 값을 저장하는 공간으로 Stack 메모리에 저장된다.
- 컴파일 시점에 데이터의 표현 범위를 벗어나면 컴파일 에러가 발생한다.
- byte, char , short, int, long, float, double, boolean
⚡Reference Type (참조 타입)
- 메모리 상에서 객체가 있는 위치를 저장한다.
- java.lang.Object 를 상속받는 타입이다.
- 빈 객체를 의미하는 Null 값을 가질 수 있다.
- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 Heap 메모리에 저장된다.
- 런타임 에러가 발생한다.
- Array, Enumeration, Class, Interface
⚡ Reference Type (참조 타입) - Wrapper Class
참조 타입 자료형 중에서 기본 자료형 (int, double, boolean 등)의 데이터를 인스턴스(객체)로 만들기 위해 사용하는 클래스이다.
사용하는 이유는 제네릭, Null 값 가능 여부, 매개변수 등에서 Primitive Type 이 아닌 Reference Type 을 필요로 하는 경우가 있기 때문이다.
인스턴스를 생성하여 Heap 메모리에 저장하고 상속 및 재사용이 가능하며 다양한 메서드를 이용할 수 있다.
⚡ Boxing / Un Boxing
박싱이란 기본 자료형의 데이터를 래퍼 클래스의 객체로 만드는 과정을 의미하며,
언박싱은 래퍼 클래스의 데이터를 기본 자료형으로 변환하는 과정을 말한다.
📌 int 와 Integer 의 차이는?
종합해보면면
int 는 Primitive Type 이고,
Integer 는 Reference Type 의 Wrapper Class 에 속한다.
1. Primitive 는 null 이 불가능하지만 Reference 는 가능하다.
2. Primitive 는 제너릭에서 사용이 불가능하지만, Reference 는 가능하다.
3. Primitive 는 Stack 메모리에 값이 존재하기 때문에 접근 속도가 비교적 빠르지만,
Reference 는 Stack(정적) 메모리에 참조값만 있고 실제값은 Heap(동적) 메모리에 존재하여 Unboxing 과정을 거치므로 비교적 느리다.
(예외적으로 Primitive 값이 매우 크다면, Reference 가 더 효율적일 수 있다.)
즉 각각 다른 자료형이기 때문에 박싱과 언박싱을 사용하여 변환 후 때에 따라 사용하면 되는 것이다.
📌 Reference
@츄르코딩 - [Java] int와 Integer는 뭐가 다를까?
@yeastriver - [211105 금] 셀 과제 : primitive type, reference type
'Data Structure & Algorithm > Data Structure' 카테고리의 다른 글
[Data Structure] 자료 구조 개념 및 종류 (0) 2023.08.09