안녕하세요. 하도야지 입니다.
최근 이직을 위해 봤었던 인터뷰에서
첫 질문으로 받은 내용은 'int와 Integer의 차이가 무엇인가?' 였습니다.
3년 간 회사를 다니며 매일 선언하고 사용하던 것이 int, Integer였는데..
질문을 듣는 순간 '뭐가 다르지?' 라는 생각이 든 동시에,
나 : "int는 변수 선언할 때 썻던 것 같고요... Integer는 정수형을 객체로 쓸 때 썻던 것 같아요...."
정도의 수준의 답변 밖에 하지 못하였습니다...
그 날의 부끄러움을 뒤로 하며,,, 블로그의 첫 글은 int와 Integer는 무엇이 다른가 라는 내용으로 기록해보겠습니다.
답부터 말한다면, 다음과 같이 말할 수 있습니다.
int는 변수의 타입(data type)이다.
위의 답을 하나씩 풀어보자면,
변수(variable)는 '값을 저장할 수 있는 메모리 상의 공간'을 의미 합니다.
int a = 3;
char firstName = "H";
에서 a 나 H 는 변수(변수명)가 되는 것입니다.
그리고 그 앞에 적힌 int 와 char가 변수의 형을 지정해주고 있는 것이,
변수의 타입( = data type = 자료형 ) 이라 합니다.
즉, 자료형은 'data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것' 이라고 볼 수 있습니다.
이러한 자료형은 기본형(primitive type)과 참조형(referece type)으로 나뉘는데,
int 는 이 중 기본형에 속합니다.
기본형에는 다음과 같은 종류가 있습니다.
맨날 쓰던 Integer인데.... 어디에 썻더라..? 하고 생각해보면 주로
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);
이런 경우에 많이 쓰거나 봤었기에, 'int랑 뭐 사촌... 그런거아니야?' 정도 로만 생각하곤 별 의심없이 사용하곤 했었습니다..
**
다시 본론으로 가서.. Integer는 무엇인가 하면,
1)에서 다룬 기본형을 표현해야 하는 경우가 있습니다.
이런 경우 기본형을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다.
그리고 Integer는 int의 레퍼클레스 라고 할 수 있습니다.
모든 기본형은 래퍼클래스를 생성할 수 있고, 이는 아래와 같습니다.
3) 그래서 int와 Integer는 어떻게 다른거지?
int : 자료형(primitive type)
Integer : 래퍼 클래스 (Wrapper class)
**
boxing : primitive type -> wrapper class 변환 ( int to Integer )
unboxing : wrapper class -> primitive type 변환 ( Integer to int )
으로 정리할 수 있을 것 같습니다.
Retro
면접 질문을 받으면서,
- 내가 비전공자라서, 기초적인 지식을 공부한 경험이 없긴 없었구나.
- 맨날 쓰는 건데 한번 찾아볼 생각도 없이 그냥 쓰고 있었구나.
라는 생각에 참 많이 부끄러웠습니다..
앞으로라도 그 의미를 알고 사용하기위해 사소한 부분부터 시작해보려고 합니다.
잘못된 부분이나 추가적인 내용이 필요하다면
언제든 댓글, 연락주시면 정말 감사드립니다.
읽어 주셔서 감사합니다.
저도 면접에서 같은 질문.. 같은 대답이었습니다.
면접을 통해서 간과했던 부분을 깨달을 수 있었어요 ㅎㅎ
그리고 첨언 드리자면, 데이터를 저장하는 크기 방면에서도 int와 Integer의 차이를 볼 수 있어요~