그동안 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 |
---|