본문 바로가기
Java

[Java] int vs. Integer (feat. wrapper class)

by 왕타오 2023. 12. 4.

int 와 integer는 같은거라 생각했지만 Java 에서는 다르다고 한다. 

 

int는 변수의 타입(자료형)이다. 자료형은 기본형(primitive type), 참조형(reference type)으로 나뉘고, int는 이 중에서 기본형에 속한다. 

 

 

그럼, Integer는 뭘까? 

 

Integer는 int의 wrapper 클래스 이다. wrapper 클래스는 기본 자료형을 객체로 다루기 위해 사용하는 클래스를 의미한다.

 

기본 자료형을 객채로 다룬다? 무슨 말이지? 

* 매개변수로 객체를 필요로 할때

* 기본형 값이 아닌 객체로 저장해야할때

* 객체 간 비교가 필요할때 

 

프로그래밍을 하다보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 있다.

이 때 기본 자료형을 객체로 다루기 위해서 사용하는 클래스들을 wrapper 클래스 라고 한다.

 

wrapper 클래스는 java.lang 패키지에 포함되어 있으며, 대응되는 기본 자료형은 아래와 같다.

 

int vs Integer

int 는 산술 연산이 가능. null로 초기화할 수 없다.

Integer는 *Unboxing을 하지 않으면 산술 연산이 불가능. null 값 처리 가능.

 

Boxing과 Unboxing

아래 그림과 같이 기본 타입의 데이터를 wrapper 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)이라고 하고, wrapper 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 언박싱(UnBoxing)이라고 한다.

 

Wrapper 클래스, 왜 사용하는거지?

 

1) 메소드에 매개변수로 전달된 파라미터의 수정이 필요한 경우 오브젝트가 필요하다.

2) 거의 모든 패키지의 클래스들은 제네릭 타입을 파라미터로 받는다. 제네릭 타입은 래퍼 클래스만 들어갈 수 있다.

3) 컬렉션 프레임 워크의 데이터 구조는 기본 타입이 아닌 객체만 저장할 수 있으며, 래퍼 클래스를 사용해 자동 박싱과 언박싱이 일어난다.

4) 웹 서버의 경우 클라이언트에서 null 값이 왔을 때 기본 자료형이면 예외가 발생한다.