본문 바로가기
JAVA

Java Integer.valueOf VS Integer.parseInt 어떤것을 써야할까?

by helloissue 2021. 8. 18.

자바에서 `10`과 같은 문자열을 숫자 값으로 변형해서 계산해야 할 때, 변환 방법에 2가지가 있으므로 무얼 써야 하지 하고 고민을 한적 있으신가요? 대충 익숙한 Integer.parseInt를 쓴 거 같은데, 그 둘의 차이점은 무엇이고, 어느 때 사용해야 맞는 것일까 알아보겠습니다.

Java Integer.valueOf VS Integer.parseInt 어떤것을 써야할까?
Java Integer.valueOf VS Integer.parseInt 어떤것을 써야할까?


Integer.valueOf VS Integer.parseInt 둘 다 숫자일까?

계산은 가능한가? 왜 숫자 변환의 매소드가 2개나 있지? `integer.valueOf` ,`Integer.parseInt`의 매소드를 살펴보면 반환형이 다름을 확인할 수 있다. 'Integer.parseInt'의 경우 우리가 잘 알고 있는 int 형으로 반환한다. 즉 계산이 가능하다는 이야기이다. 'integer.valueOf'의 경우 Integer라는 형으로 반환되고, 심지어 숫자가 들어있다. 같은 거 아닐까? 숫자가 들어있으니 같은 것 같다는 생각이 든다. 좀 더 알아봐야 할 것 같다.

 

int 	iTotal = Integer.parseInt("10");
Integer Itotal = new Integer(10);

System.out.println( Itotal == itotal ); //true
System.out.println( Itotal == new Integer(10) );//false
System.out.println( Itotal == Integer.valueOf("10") ); //false

 

Integer ( Wrapper 클래스 )는 무엇인가?


- Integer wrapper Object로 뭔가가 둘러쌓은 Wrapper 래퍼 클래스이다.
- 직접적인 산술연산은 불가능합니다. (계산하려면 클래스. int Value(); 이런 식으로 언박싱을 하여야 함)
- null 값 처리가 쉽다고 한다.
- Integer Cache라는 곳에서 캐시에 이미 생성한 것이 있으면, 바로 반환하고 아니면 새로 생성한다.
가장 중요한 특징으로 직접적인 산술연산 불가에 초점을 맞추어서 사용하지 않으면 되겠다는 느낌이 들었다.
세부적으로 찾아보니 Integer Cache에서 이미 생성된 것을 반환하거나, 새로 반환할 때 각 객체마다의 해시 코드를 부여하고 wrapper 클래스의 비교 `==`는 해시 코드를 비교하여 같은지를 비교한다고 합니다. 즉 한 번은 01번의 해시 코드를 또 다른 한 번은 02번의 해시 코드를 부여했으니 `01`==`02`를 비교하니 false가 나오는 것입니다.

 

그럼 Integer는 언제 사용되는가?

자바매소드 인자로 int가 아닌 Object를 요구할 때, 래퍼 클래스로 감싸줍니다.
래퍼 클래스가 제공하는 상수를 사용하고자 할 때 MIN 또는 MAX 최댓값과 최솟값이 미리 정의되어 있습니다.

 


마치면서 무엇을 사용하는 것이 유리 한가에서 특정 형태들의 소수들모음과 같은 custom wrapper 클래스를 만들 거나하지 않은 이상, ('Integer.parseInt')기본 형태로의 사용이 계산도 편리하고, 메모리 사용도 더 적고, 또한 익숙하니, 굳이 래퍼 클래스까지의 활용은 추천하지 않습니다. 래퍼는 직접 계산이 힘드니, 필요하지 않으면 사용을 자제하는 것이 좋습니다.

댓글