본문 바로가기

컴퓨터/JAVA

[java] int와 Integer?

자바 코딩테스트를 준비하면서 헷갈렸던 점을 정리하려고 한다.

자바 프로젝트를 하고있지만서도.. 알고리즘 문제를 풀면서 새롭게 공부하거나

알게되는 사실들이 많은 것 같다.

 

자바의 자료형은 크게 기본 타입참조 타입으로 나누어진다.

기본 타입은 char, int, boolean 등을 포함하며 참조 타입은 class, interface 등을 포함하는데

종종 기본 타입 데이터를 객체로 표현해야 하는 경우가 생긴다.

 

이때, 기본 자료 타입(primitive type)을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스(wrapper class)라 한다.

wrapper class : 객체가 기본 데이터 유형을 포함하는 클래스

 

int

우슨 int는 변수의 타입이다. 

즉, 원시적인 자료형으로 메소드를 가지지 못한다. 

 

Integer

Integer는 int의 wrapper class이다. 

매개 변수로 객체를 필요로 하거나

객체로 저장할 때 혹은 객체 간 비교를 할 때 사용한다.

 

결과적으로 

int는 자료형으로 산술 연산이 가능하고 저장공간이 작지만

Integer는 그 자체로 산술연산이 불가능하고 null값으로 초기화가 가능하며 저장공간이 크다.

 

이 두 가지는 아래와 같이 서로 변환이 가능하다.

Integer -> int   (unBoxing)

int -> Integer (Boxing)

 

래퍼클래스 간 비교를 할 때에는 내부의 값을 비교해야 하므로 == 연산자로는 비교할 수 없고

equals를 사용해야 한다. (참조 타입이므로 참조 주소를 비교하게 된다.)

 

반면, 래퍼클래스와 기본자료형을 비교할 때에는 두 연산 모두 가능한데 컴파일러가 자동으로

박싱과 언박싱을 수행해주기 때문이다.

728x90