String 타입캐스팅 vs String.valueOf()

이담호·2025년 3월 28일
post-thumbnail

두 방식 모두 String 타입으로 변환하는 것은 동일하지만, 동작 방식과 예외 처리에서 차이가 있다.

Object intValue = 100;
String str1 = (String) intValue;
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
	at main.Main.main(Main.java:6)

(String) value로 타입 캐스팅 하는 것은 value가 String 타입이 아닌 경우 ClassCastException이 발생하고,

Object nullValue = null;
String str2 = (String) nullValue;
str2.concat("hello world");
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.concat(String)" because "str2" is null
	at main.Main.main(Main.java:7)

value가 null인 경우 그대로 null을 반환하여 이후 메서드를 호출할 때 NullPointerException이 발생한다.

Object intValue = 100;
String str1 = String.valueOf(intValue);

Object nullValue = null;
String str2 = String.valueOf(nullValue);
str2.concat("hello world");

String.valueOf(value)는 value가 String 타입이 아닌 경우 value.toString()을 호출하여 String으로 변환하며, value가 null인 경우 "null" 문자열을 반환한다.

타입 캐스팅에서 발생하는 예외는 런타임 시점에 발생하기 때문에 String.valueOf()가 더 안전하고 예외를 방지할 수 있다.

String.valueOf(null)이 "null"을 반환하는 것이 문제가 될 수 있다?

"null"이라는 문자열과 null 자체는 다른 의미를 가질 수 있기 때문에 문제가 될 수 있다. 특히, JSON 변환이나 데이터베이스에 저장할 때 null이 "null" 문자열로 저장되어서 오류가 발생할 가능성이 있다. 원치 않는 "null" 문자열을 방지하려면 미리 null 여부를 검증하고 따로 처리하거나, Objects.toString()을 사용해서 null일 경우 다른 문자열로 처리하는 방법을 사용할 수 있다.

0개의 댓글