본문으로 바로가기

Integer.parseint & Integer.valueof 차이

category JAVA/기본 상식 2021. 2. 26. 15:50

Integer클래스에는 valueOf, parseint 메서드가 있다. 두 메서드는 매개 변수로 전달 받은 문자열(String) 값을

정수형태로 반환한다.

Integer.parseint : primitive tpye인 int형을 반환

Integer.valueof : Wrapper Object인 Integer를 반환

그렇다면 여기서 int와 Integer는 어떻게 다른가?

간단하게 말하자면 int는 기본자료형(unboxed primitive type),

Integer는 참조자료형 또는 기본자료형들에 대응되는 객체화된 자료형(boxed primitive type) 이라고 할 수가 있습니다.

아니, 그동안 int형만 자주 쓰느라 참조 자료형이랑 말은 생소한데 이건 또 뭐지.... 하는 의문이 생겼고

또, 그렇다면 기본 자료형과 객체화 된 자료형은 어떻게 다른가?로 귀결될 수 있는데!

보통 흔히 쓰는 int, long, boolean등의 자료형들을 기본 자료형이라 하고 Integer, Long, Boolean 등을 객체화 된 자료형이라고 한다.

이렇게만 설명을 들으면 이해하기가 힘들기 때문에 몇 가지 예시를 통해서 기본 자료형과 객체화 된 자료형의 차이를 보도록 하자.

1. 기본자료형은 값만 가지지만 객체환 된 자료형은 각각의 신원(identity)을 가진다.

-> 즉, int a = 42, b = 42; 일때 a==b는 같지만 c==d는 다를 수 있다는것

 


int a = 42;
int b = 42;
 
Integer c = new Integer(42);
Integer d = new Integer(42);
 
if(a==b){
    System.out.println("Success");
}
 
if(c==d){
    System.out.println("Success too");
}else{
    System.out.println("They have different identity");
}

2. 기본 자료형은 int형 값을 가지기 때문에 산술연산을 할 수 있지만 객체화 된 자료형은 Integer클래스을 받기 때문에 unboxing (wrapper 클래스 -> primitive 자료형)을 해주지 않으면 산술연산을 할 수 없다. 하지만, 기본자료형과 달리 null값으로 처리할 수 있기 때문에 SQL과 연동할 경우 처리가 용이하다.

 


int a = null;           // null값으로 초기화 할 수 없음
Integer b = null;       // null값으로 초기화 할 수 있음

 

3. 굳이 객체화된 자료형을 사용할 이유가 없다면 primitive 타입을 쓰는 것이 공간효율적인 측면에서 좋다.

Integer의 사이즈 : 20byte

int의 사이즈 : 4byte

 

그렇다면 Integer(객체화 된 자료형)는 언제 쓰는가?

 

Integer와 같은 객체화 된 자료형들은 아까 위에서 보았듯이,

첫째, null값으로의 처리가 유용하기 때문에 SQL과 연동할 경우 즉, DB를 사용해서 쿼리문을 짜줘야하는 경우에 유용하다.

둘째, ArrayList나 List등의 요소, 키, 값으로 사용할 때 이다. 다시 말해서 ArrayList<int>는 안되지만 ArrayList<Integer>로 사용할 수 있다는 말이다.

 

마무리

 

1. 단순하게 valueOf와 parseInt의 차이점에 대해서만 생각을 했었으나, 

  Integer(Wrapper Class)와 int(Primitive type)의 차이에 대해서 알게 되었고, 

  기본자료형과 참조자료형의 차이점을 알게 되었다.

 

* Wrapper Class의 대한 정리를 하자면

  • 본 자료형에 대한 클래스 표현을 래퍼 클래스라고 합니다. Integer, Float, Boolen등이 래퍼클래스의 예이다.

* Wrapper class 를 사용해야 하는 이유는??

  • 객체지향적인 프로그램을 위한 프로그래밍이기 때문에 기본자료형이었으면, == 으로 바로 비교해줄 수있지만, 래퍼클래스 경우에는 .intValue() 메소드를 통해 해당 래퍼 클래스의 값을 가져와 비교해줘야 합니다.

* boxing, unboxing 무엇인지, 자동으로 언제 일어나는지

  • wrapper class에서 기본형 객체를 wrapper로 바꿔주는 것을 박싱이라고하고, 반대로 primitive로 바꾸는것을 언박싱이라고 합니다.

 

2. 이 개념들을 더 자세하게 알기 위해서는 Wrapper Class와 Primitive type의 차이의 개념에 대해 알아야 될 것이다.

 

참조사이트1 : ehdvudee.tistory.com/11

 

참조사이트2 : ohmycode9328.tistory.com/13