Java 기초개념

parse 메서드와 valueOf 메서드(parseInt, Integer.valueOf, 차이점)

크딩학생 2024. 1. 17. 10:42

백준을 풀다보니 parse 메서드와 valueOf 메서드를 사용해야 하는 경우가 많았다.

그래서 정리하며 차이점과 사용 예제를 알아보려 한다.

 


1. valueOf 메서드 : 타입.valueOf(value)

여러 가지 자료형의 객체 또는 원시 타입을 해당 타입의 객체로 변환하는 데 사용

주로 'String' 또는 원시 타입을 그에 사응하는 래퍼 클래스의 인스턴스로 변환 

String 외에도 다른 타입도 제공하는 것이 특징


 

1) 기본 데이터 타입 래퍼 클래스: 각 기본 데이터 타입('int', 'long', 'float', 'double', 'boolean', 'char' 등)에 대한 래퍼 클래스('Integer', 'Long', 'Float', 'Double', 'Boolean', 'Characer' 등)는 'valueOf' 메서드를 제공.

이 메서드는 문자열이나 해당 원시 타입의 값을 해당 래퍼 클래스의 객체로 변환

Integer intObj = Integer.valueOf("123"); // integer 타입으로 변환
Double doubleObj = Double.valueOf("12.34"); // double 타입으로 변환
Boolean boolObj = Boolean.valueOf("true"); // boolean 타입으로 변환

 

2) String 클래스: 'String' 클래스 자체도 'valueOf' 메서드를 가지고 있으며, 이는 다양한 타입의 데이터를 문자열로 변환하는 데 사용된다. 

String strFromInt = String.valueOf(123); // 정수형을 문자열로 
String strFromChar = String.valueOf('c'); // 문자를 문자열로
String strFromBool = String.valueOf(true); // bool 타입을 문자열로

 

이 메서드들은 주로 원시 타입의 데이터를 객체로 포장하거나 (예: int를 Integer로 변환), 다른 타입의 데이터를 문자열로 변환할 때 사용된다. 따라서 문자열 처리가 필요한 상황에서 유용하게 사용할 수 있다. 

 

 

2. parse 메서드 : 타입.parse데이터타입(String)

parse 메서드는 문자열 해당 타입의 원시 값으로 변환하는 데 사용되는 메서드이다. 

주로 래퍼 클래스에서 제공된다. 

다른 타입은 불가능하며, 오직 String 타입만 변환 가능하다.


사용 예제

int intValue = Integer.parseInt("123"); // 문자열을 int 타입의 값으로 변환
long longValue = Long.parseLong("1234567890"); // 문자열을 long 타입의 값으로 변환
double doubleValue = Double.parseDouble("123.45"); // 문자열을 double 타입의 값으로 변환
float floatValue = Float.parseFloat("123.45"); // 문자열을 float 타입의 값으로 변환
Boolean boolValue = Boolean.parseBoolean("true"); // 문자열을 boolean 타입의 값으로 변환

 

이러한 parse 메서드들은 문자열로부터 해당 데이터 타입의 원시 값을 추출하는 데 유용하며,

사용자 입력이나 파일에서 데이터를 읽을 때 자주 사용된다. 

문자열이 해당 데이터 타입으로 변환될 수 없는 경우(예: "abc"를 'int'로 변환하려 할 때),

"NumberFormatException"과 같은 예외가 발생할 수 있다. 

 

 

3. valueOf 메서드와 parse 메서드의 차이점

valueOf 메서드와 parse 메서드는 모두 문자열을 다른 타입의 값으로 변환하는 사용되지만, 주요 차이점은 반환하는 타입과 사용 목적에 있다.


1) valueOf 메서드 

  • 반환 타입: valueOf 메서드는 해당 타입의 래퍼 클래스 객체를 반환한다. 예를 들어, "Integer.valueOf("123")는 "Integer"객체를 반환한다. 
  • 사용 목적: 이 메서드는 주로 원시 데이터 타입을 그에 상응하는 객체로 변환하는 데 사용된다. 따라서 객체를 사용해야 하는 경우에 적합하며, 제네릭스, 컬렉션 프레임워크 등에서 원시 타입을 사용할 수 없는 경우 'valueOf' 메서드를 사용하여 객체로 변환할 수 있다. 

2) parse 메서드

  • 반환 타입: parse 메서드는 해당 타입의 원시 데이터 타입 값을 반환한다. 예를 들어, "Integer.parseInt("123")는 "int" 타입의 원시 값 123을 반환한다.
  • 사용 목적: parse 메서드는 문자열을 원시 데이터 타입으로 변환할 때 사용된다. 특히 기본적인 데이터 처리에서 성능상의 이점을 얻고자 할 때 사용된다. 

간단히 말해, "valueOf"객체를 반환하고, "parse"원시 타입을 반환한다.