본문 바로가기
Old Posts/Java

[Java] 문자열 to 정수 변환 - valuOf()와 parseInt() 차이

by A6K 2021. 5. 18.

자바 프로그래밍을 하다보면 문자열 형태로 표현된 정수 데이터를 파싱해서 정수타입(int)으로 사용해야하는 경우가 자주 있다. 이 경우 valueOf() 메소드와 parseInt() 메소드를 사용하게 된다. 이 두 메소드의 차이점을 알아보자.

int number1 = Integer.valueOf("100");
System.out.println("number1 = " + number1);

int number2 = Integer.parseInt("100");
System.out.println("number2 = " + number2);

"100"이라는 문자열을 정수타입(int)으로 변환하기 위해서는 위 코드처럼 Integer.valueOf() 메소드와 Integer.parseInt() 메소드를 사용하면 된다. 이 코드를 실행하면 다음과 같이 동일한 결과를 얻을 수 있다.

number1 = 100
number2 = 100

동일한 결과를 출력하지만 Integer.parseInt()Integer.valueOf()는 분명 다르다. 

Integer.parseInt()

우선 parseInt() 메소드를 살펴보자. parseInt() 메소드의 JavaDoc 문서를 보면

public static int parseInt(String s) throws NumberFormatException
Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value or an ASCII plus sign '+' ('\u002B') to indicate a positive value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(java.lang.String, int) method.

Parameters:
  s - a String containing the int representation to be parsed

Returns:
  the integer value represented by the argument in decimal.

Throws:
  NumberFormatException - if the string does not contain a parsable integer.

리턴 타입이 int 다. parseInt() 메소드가 반환하는 값은 '기본 자료형(Primitive Type)'이다.

Integer.valueOf()

마찬가지로 valueOf() 메소드를 살펴보자. valueOf() 메소드의 JavaDoc 문서를 보면

public static Integer valueOf(String s) throws NumberFormatException
Returns an Integer object holding the value of the specified String. The argument is interpreted as representing a signed decimal integer, exactly as if the argument were given to the parseInt(java.lang.String) method. The result is an Integer object that represents the integer value specified by the string.
In other words, this method returns an Integer object equal to the value of: 
  new Integer(Integer.parseInt(s))

Parameters:
  s - the string to be parsed.

Returns:
  an Integer object holding the value represented by the string argument.

Throws:
  NumberFormatException - if the string cannot be parsed as an integer.

입력받은 문자열의 값을 정수형으로 변환한 다음 Integer 객체를 만들어 반환한다. 즉, valueOf() 메소드는 new Integer(Integer.parseInt(s))와 같다.

사실 Java 1.5에서 도입된 'Autoboxing and Unboxing' 덕에 서로 뭘써도 상관이 없다. Integer 객체로 리턴을 받아서 int 변수에 할당하면 자동으로 형변환이 일어나기 때문이다. 대신 내부적으로 객체 생성 오버헤드가 있을 수 있다.

댓글