백준에서 문제를 풀다가 궁금증이 생겼다.
정수형 배열을 선언할 때, 보통 아래 방식으로 선언했다.
int arr[] = new int[10];
하지만 문제를 제출하니 런타임에러가 떴고 찾아보니
Integer arr[] = new Integer[10];
위와 같이 선언을 해야한다는 것이었다...
약 4년 동안 int와 Integer를 항상 사용했지만 이 2개의 차이점을 알지 못하고 있었다는 것이
충격이었다. 그래서 이 포스팅을 적게 되었다....
1. int 란? (Primitive Type)
int는 변수의 타입 (data type)이다.
변수(variable)는 '값을 저장할 수 있는 메모리 상의 공간'을 의미한다.
int a = 3;
char firstName = 'H';
위에서 a 와 firstName 은 변수(변수명)가 되는 것이다.
그리고 그 앞에 적힌 int 와 char가 변수의 형을 지정해주고 있는 것이고,
변수의 타입( = data type = 자료형) 이라고 한다.
즉, 자료형은 'data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것' 이라고 볼 수 있다.
자료형은 기본형(Primitive type)과 참조형(Reference type)으로 나뉘는데,
int 는 이 중 기본형에 속한다.
2. Integer란? (Wrapper class)
Integer란 기본형을 표현해야 하는 경우가 있다.
- 매개변수로 객체를 필요로 할 때
- 기본형 값이 아닌 객체로 저장해야할 때
- 객체 간 비교가 필요할 때
이런 경우 기본형을 객체로 다루기 위해 사용하는 클래스들은 래퍼 클래스(Wrapper class)라고 한다.
그리고 Integer는 int의 래퍼 클래스라고 할 수 있다.
3. int와 Integer의 차이점
✅ int : 자료형 (Primitive type)
- 산술 연산 가능함
- null로 초기화 불가
✅ Integer : 래퍼 클래스(Wrapper class)
- Unboxing하지 않을 시 산술 연산 불가능함
- null값 처리 가능
boxing : primitive type → wrapper class 변환 (int to Integer)
unboxing : wrapper class → primitive type 변환 (Integer to int)
참고
'자료구조' 카테고리의 다른 글
[자료구조] 큐 Queue, 덱 Deque (2) | 2023.01.16 |
---|---|
[자료구조] 스택 (Stack) (0) | 2023.01.06 |