Java에서 Object를 String 으로 변환할 때 주의할 점

갱갱갱갱
2 min read

Java에서 Object 타입의 value를 String으로 변환할 때는 보통 두 가지 방식이 사용됩니다.

  1. 명시적 타입 캐스팅

  2. String.valueOf(value) 메서드

각 방식은 동작 방식과 안정성 면에서 중요한 차이가 있습니다.


1. 명시적 타입 캐스팅

  • 전제 조건: value가 반드시 String 타입이어야 함.

  • 그렇지 않으면 ClassCastException이 발생함.

예시


Object value = "hello";
String str = (String) value; // OK

Object value = 123;
String str = (String) value; // ClassCastException

💡타입 캐스팅할 때 ClassCastException을 방지하는 방법은?

instanceof 연산자를 사용하는 방법이 있습니다.

Object value = "hello";

if (value instanceof String) {
    String str = (String) value;
    System.out.println(str); // OK
} else {
    System.out.println("value 는 String이 아닙니다.");
}
  • instanceof 는 해당 객체가 특정 클래스의 인스턴스인지 확인.

  • Java 16 부터는 패턴 매칭이 지원되어 더 간결하게 코드 작성 가능.

if(value instanceof String str){
    System.out.println(str); // 자동 캐스팅
}

2. String.valueOf(value)

String str = String.valueOf(value);
  • 안전한 방식.

  • 내부적으로 아래와 같은 로직을 수행함.


public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

특징

  • value가 null이면 문자열 "null"을 반환.

  • value가 다른 타입이면 toString()을 호출.

  • 예외를 발생시키지 않음.

예시


Object value = 123;
String str = String.valueOf(value); // "123"

Object value = null;
String str = String.valueOf(value); // "null"

💡String.valueOf(null)이 “null”을 반환하는 것은 문제가 될 수 있다.

이 방식은 실체 null 객체가 아닌 문자열 “null”을 반환하기 때문에 , 원래 의도와 다른 의미로 해석될 수 있습니다.

따라서 값이 null 일 경우에는 명시적으로 처리해주는 것이 좋습니다.

예를 들어, null 이면 빈 문자열을 사용하고 싶다면 다음과 같이 코드를 작성할 수 있습니다.

0
Subscribe to my newsletter

Read articles from 갱갱 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

갱갱
갱갱