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 값이 왔을 때 기본 자료형이면 예외가 발생한다.
'Java' 카테고리의 다른 글
[Java][Spring] IoC / DI / Component scan (0) | 2023.12.20 |
---|---|
[Java] 리플렉션(Reflection) 이란? (feat. 어노테이션) (0) | 2023.12.06 |
[Java] logger(slf4j, log4j), system.out.println() (0) | 2023.11.27 |
[Java] hashcode() (feat. equals()) (1) | 2023.11.22 |
[Java] == vs. equals() (1) | 2023.11.22 |