그동안 String 형변환을 할 때에 toString() 메소드만을 사용해 왔는데, 사내 코드에서 String.valueOf()를 사용하고 있는 것을 보았다.

 

toString()String.valueOf(), 그리고 (String) 캐스팅은 모두 자바에서 문자열이 아닌 값을 문자열로 변환하는 점에서 비슷해보이지만, 사용 목적과 결과가 조금씩 다르다. 이를 하나씩 자세히 살펴보자.

 

toString()

toString() 메소드Object 클래스에서 기본적으로 제공하는 메소드이다. 이 말은 즉, 모든 Java 객체가 상속받는다는 것이다.

이러한 특징은 각 클래스가 오버라이딩 할 수 있다는 얘기이기도 하다. 개발자는 toString() 을 오버라이드하여 자신만의 문자열 표현을 정의할 수가 있다.

 

이 외에도, Java에서 제공하는 Object 하위 클래스들이 toString()을 오버라이드한 의미 있는 문자열 반환을 제공한다. 예를 들어, ArrayList는 요소들을 전부 포함하는 문자열을 반환해준다.

 

toString() 메소드를 사용하고자 하는 객체 값이 null일 때에

toString()은 이를 예외로 간주하고 NullPointerException을 반환한다.

 

String.valueOf()

String.valueOf() 메소드String 클래스에서 제공하는 Static 메소드로,

객체 뿐만 아니라 기본 자료형(Primitive Type)의 필드들도 문자열로 변환할 수가 있다.

 

String.valueOf() 메소드는 toString() 메소드와 달리 null을 예외로 간주하지 않는다.

이는 NullPointerException이 발생하지 않는다는 의미이다.

 

그렇다면 String.valueOf() 메소드를 사용하고자 하는 객체 값이 null일 때에는 어떻게 될까?

String.valueOf() 메소드는 객체가 null인 경우 특이하게 문자열 "null"을 반환해준다.

기본 자료형을 문자열로 반환시키는 메소드답게 null도 문자열로 반환시킨다는 것이다.

 

아래는 String.valueOf()를 활용한 예시 및 출력 결과이다.

// Object 타입
Object obj = new Integer(42);
System.out.println(String.valueOf(obj)); // "42"

// char 배열
char[] data = {'h', 'e', 'l', 'l', 'o'};
System.out.println(String.valueOf(data)); // "hello"

// char 배열의 일부
System.out.println(String.valueOf(data, 1, 3)); // "ell"

// boolean 타입
boolean bool = true;
System.out.println(String.valueOf(bool)); // "true"

// char 타입
char c = 'a';
System.out.println(String.valueOf(c)); // "a"

// int 타입
int i = 42;
System.out.println(String.valueOf(i)); // "42"

// long 타입
long l = 42L;
System.out.println(String.valueOf(l)); // "42"

// float 타입
float f = 3.14f;
System.out.println(String.valueOf(f)); // "3.14"

// double 타입
double d = 3.14;
System.out.println(String.valueOf(d)); // "3.14"

// null 객체
Object nullObj = null;
System.out.println(String.valueOf(nullObj)); // "null"

 

3. (String) 캐스팅

(String)을 사용한 명시적 캐스팅객체를 문자열로 강제 변환할 때 사용된다.

 

캐스팅인 만큼, 객체가 이미 String 자료형일 때만 사용할 수 있고, 그렇지 않으면 ClassCastException이 발생한다.

반대로 객체가 null인 경우에는 NullPointerException을 발생시키지 않고 null을 그대로 반환한다.


 

요약하자면 아래와 같다.

 

toString()

  • 모든 객체 사용 가능
  • 오버라이딩이 가능하여 커스텀 할 수 있음
  • 객체가 null일 때 NullPointerException 예외 반환

⇒  사용 객체 값에 강제성이 필요할 때 사용

 

valueOf()

  • 모든 타입 사용 가능 (기본 자료형 포함)
  • 객체가 null일 때 문자열 "null" 반환

null 값에 대한 유연한 처리가 필요할 때 사용

 

(String) 캐스팅

  • 문자열 객체 사용 가능
  • 객체가 문자열이 아닐 때 ClassCastException 예외 반환
  • 객체가 null일 때 null 반환

⇒  들어오는 값이 문자열임을 확신할 때 사용

'프로그래밍 언어 > Java' 카테고리의 다른 글

The package * collides with a type 오류 해결  (0) 2024.07.19
유영웅