[Java] int와 Integer의 차이 ~Integer.parseint()~(인트 인티저 래퍼 원시 자료형 참조형 기본형 파싱)_wrapper class primitive data type_-Difference between int and Integer-++

+ int와 Integer의 차이


1. primitive data type vs class

가장 큰 차이이자 핵심이다.

int는 자바의 원시 자료형이고, Integer는 자바의 클래스이다.


Integer.parseint(String s); 같은 메서드를 사용 할 수있는것도

Integer가 java에서 제공하는 class이고 그클래스안에 parseint라는 메서드가 존재하여,

Integer.parseint(); 메서드를 사용할 수 있는것이다.


당연히 int는 원시형 자료형임으로 int.parseint()라는 메서드를 사용 할 수 없다.


2. 기본형 vs 참조형

Java는 90% 객체지향 언어로 모든것에 객체를 사용하는데 성능 때문에 기본형이 필요했다. 

주소를 가리킬 때 객체가 아닌 기본형이면 주소값을 바로 찾을 수 있으니까.


int Integer만 놓고 본다면 

Integer는 래퍼 클래스이고,

래퍼클래스는 기본형을 감싸고있다.


int를 읽을 때는 int주소만읽으면되는데,

인티저를 읽을 떄는 참조변수를 읽고 기본형 주소를 찾아가서 한번 더읽어야 하기 때문에 

2번 수행해야함으로 성능이 저하되는 단점이있다.


3. AutoBoxing AutoUnBoxing (JDK 1.5 부터 추가된 개념)

우리가 해시맵에서 정수형으로 된 키를 사용할 때

hMap.get(3);

이러한 형태로 사용하게 된다.

조금 모순이지 않은가?

분명 다형성을 위해서 원시 자료형이 아닌 객체의 형태로 저장하는데 원시 자료형인 3, 즉 int를 그냥 사용하고 있는 것이다.

이것은 객체와 객체 사이의 형변환도, 자료형과 자료형 사이의 형변환도 아닌 원시 자료형을 객체처럼 사용한 것이다.

많은 사람들이 이것 때문에 햇갈렸을 것이라고 생각한다.

 

결론만 말하자면 이러한 형변환은 AutoBoxing이라고 한다.

간단하게 설명하자면, 컴파일러가  원시 자료형을 wrapper객체의 형태로 자동으로 변환해준다고 생각하면 된다 

AutoUnBoxing은 보통 UnBoxing 이라고 불리우는데 AutoBoxing의 반대로 

컴파일러가  wrapper객체를 원시 자료형 형태로 자동으로 변환해준다고 생각하면 된다. 


* 마지막으로 눈치가 빠르다면 하나 의문이 생길수도 있는데 String은 해시맵의 매개변수로 사용될 때 별도의 변환과정이 없다.

왜냐하면 java에서 String은 원시 자료형이 아니라 그 자체로 하나의 객체이기 때문이다.

String은 int, boolean 등 과는 전혀 다른 객체이다.


출처 : 

https://gnaseel.tistory.com/19

https://dar0m.tistory.com/175

https://youtu.be/tBUm6yj4cKQ

https://youtu.be/_LlcuVFC6ao

댓글

T O P