int와 Integer는 무엇이 다른가

하도야지·2021년 5월 23일
31

Java

목록 보기
1/3
post-custom-banner

0)

안녕하세요. 하도야지 입니다.
최근 이직을 위해 봤었던 인터뷰에서
첫 질문으로 받은 내용은 'int와 Integer의 차이가 무엇인가?' 였습니다.

3년 간 회사를 다니며 매일 선언하고 사용하던 것이 int, Integer였는데..

질문을 듣는 순간 '뭐가 다르지?' 라는 생각이 든 동시에,

나 : "int는 변수 선언할 때 썻던 것 같고요... Integer는 정수형을 객체로 쓸 때 썻던 것 같아요...."

정도의 수준의 답변 밖에 하지 못하였습니다...
그 날의 부끄러움을 뒤로 하며,,, 블로그의 첫 글은 int와 Integer는 무엇이 다른가 라는 내용으로 기록해보겠습니다.


1) int는 무엇인가? (primitive type)

답부터 말한다면, 다음과 같이 말할 수 있습니다.

int는 변수의 타입(data type)이다.

위의 답을 하나씩 풀어보자면,
변수(variable)는 '값을 저장할 수 있는 메모리 상의 공간'을 의미 합니다.

int a = 3;
char firstName = "H";

에서 a 나 H 는 변수(변수명)가 되는 것입니다.

그리고 그 앞에 적힌 int 와 char가 변수의 형을 지정해주고 있는 것이,
변수의 타입( = data type = 자료형 ) 이라 합니다.

즉, 자료형은 'data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것' 이라고 볼 수 있습니다.

이러한 자료형은 기본형(primitive type)과 참조형(referece type)으로 나뉘는데,
int 는 이 중 기본형에 속합니다.

기본형에는 다음과 같은 종류가 있습니다.


2) 그렇다면 Integer는 무엇인가? (wrapper class)

맨날 쓰던 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)

  • 산술 연산 가능함
  • null로 초기화 불가

Integer : 래퍼 클래스 (Wrapper class)

  • Unboxing하지 않을 시 산술 연산 불가능함
  • null값 처리 가능

**
boxing : primitive type -> wrapper class 변환 ( int to Integer )
unboxing : wrapper class -> primitive type 변환 ( Integer to int )

으로 정리할 수 있을 것 같습니다.


Retro
면접 질문을 받으면서,

  1. 내가 비전공자라서, 기초적인 지식을 공부한 경험이 없긴 없었구나.
  2. 맨날 쓰는 건데 한번 찾아볼 생각도 없이 그냥 쓰고 있었구나.

라는 생각에 참 많이 부끄러웠습니다..
앞으로라도 그 의미를 알고 사용하기위해 사소한 부분부터 시작해보려고 합니다.

잘못된 부분이나 추가적인 내용이 필요하다면
언제든 댓글, 연락주시면 정말 감사드립니다.

읽어 주셔서 감사합니다.

profile
프로그래머를 꿈꾸는 코더
post-custom-banner

6개의 댓글

comment-user-thumbnail
2022년 5월 13일

정리가 잘 되어있네요~ 잘 읽고 갑니다

답글 달기
comment-user-thumbnail
2022년 6월 20일

감사합니다.

답글 달기
comment-user-thumbnail
2022년 12월 12일

저도 프로그래머로 취직이라도 하고싶네요

답글 달기
comment-user-thumbnail
2023년 1월 15일

안녕하세요 int, integer를 찾다가 왔습니다.

1) int는 무엇인가? (primitive type)
int a = 3;
char firstName = "H";

에서 a 나 H 는 변수(변수명)가 되는 것입니다.

변수(변수명)에서 아래 아닌가요?
H = > firstName

답글 달기
comment-user-thumbnail
2023년 3월 31일

정말 잘 봤습니다. 자바 배우면서 저 두 가지가 매번 헷갈렸는데 이해가 되네요

답글 달기
comment-user-thumbnail
2024년 7월 26일

잘 읽고 갑니다

답글 달기