안녕하세요. 하도야지 입니다.
최근 이직을 위해 봤었던 인터뷰에서
첫 질문으로 받은 내용은 '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
면접 질문을 받으면서,
- 내가 비전공자라서, 기초적인 지식을 공부한 경험이 없긴 없었구나.
- 맨날 쓰는 건데 한번 찾아볼 생각도 없이 그냥 쓰고 있었구나.
라는 생각에 참 많이 부끄러웠습니다..
앞으로라도 그 의미를 알고 사용하기위해 사소한 부분부터 시작해보려고 합니다.
잘못된 부분이나 추가적인 내용이 필요하다면
언제든 댓글, 연락주시면 정말 감사드립니다.
읽어 주셔서 감사합니다.
정리가 잘 되어있네요~ 잘 읽고 갑니다