최근 Stream 메소드를 사용해보면서, int와 Integer가 차이가 있다는 것을 알게되었고 어떤 것인 다른지 구체적으로 정리해보려고 합니다.
그렇다면 변수는 무엇일까요?
변수는 '값을 저장할 수 있는 메모리 상의 공간'을 의미합니다.
Primitive
- 데이터를 가지는 자료형을 뜻하는 원시적이 자료형.
- 메소드를 가지지 못한다.
int a=0;
char a = 'a';
에서 a는 변수(변수명)이라고 부릅니다.
int와 char을 변수의 타입(=data type = 자료형)이라고 합니다.
즉, 자료형은 'data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것' 이라고 볼 수 있습니다.
이러한 자료형은 기본형(primitive type)과 참조형(referece type)으로 나뉘는데,
int 는 이 중 기본형에 속합니다.
위의 그림은 기본형의 종류에 대해 설명하고있습니다.
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
System.out.println(intList.get(0));
String stringNum = "123";
int intNum = Integer.parseInt(stringNum);
System.out.println(intNum);
주로 이렇게 사용하였습니다.
Integer란 위에서 다룬 int형을 표현해야하는 경우에
이런 경우 기본형을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다.
그리고 Integer는 int의 레퍼클레스 라고 할 수 있습니다.
래퍼 클래스(wrapper class)
객체가 기본 데이터 유형을 래핑하거나 포함하는 클래스
모든 기본형은 래퍼클래스를 생성할 수 있고, 이는 아래와 같습니다.
int는 자료형으로서, 산술연산이 가능하고 null로 초기화 할 수 없고, 저장공간이 4byte로 작습니다.
Integer는 래퍼 클래스로서, Unboxing하지 않을 시 산술 연산이 불가능하고 null값 처리가 가능하며 저장공간이 크고, null이 가능하기 때문에 Sql에 용이하게 사용된다는 차이점이 있습니다.
boxing : primitive type -> wrapper class 변환 ( int to Integer )
unboxing : wrapper class -> primitive type 변환 ( Integer to int )
프로그램에 무리가지 않기 위해 int를 사용합니다. 용량이 더 작고 null값이 들어올 수 없으니 값이 없을때 에러를 뱉어내기 때문입니다.
Integer는 null 또는 데이터를 wrapper할 때 사용한다고 알면 좋을것 같습니다.
출처 및 참고
https://smin1620.tistory.com/287
https://velog.io/@hadoyaji/int%EC%99%80-Integer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80