1. 소개

이 기사에서는 String  캐스팅과 toString() 메서드 실행의 차이점에 대해 간략하게 설명 합니다 . 두 구문을 간략하게 검토하고 각각의 사용 목적을 설명하는 예를 살펴보겠습니다. 마지막으로 어느 것이 더 나은 접근 방식인지 살펴보겠습니다.

2. 스트링 타입 캐스팅과 toString() 메소드

빠른 요약을 통해 시작하겠습니다. (String)  구문을 사용하는 것은 Java의 유형 캐스팅 과 엄격하게 연결됩니다 . 간단히 말해서 이 구문을 사용하는 주요 작업은 소스 변수를 String 으로 캐스팅하는 것입니다 .

String str = (String) object;

우리가 알고 있듯이 Java의 모든 클래스는 직접 또는 간접적으로 toString () 메서드 구현 하는 Object 클래스 의 확장 입니다. 우리는 그것을 사용하여 모든 ObjectString 표현얻습니다  .

String str = object.toString();

이제 우리는 짧은 요약을 만들었으므로 각 접근 방식을 언제 사용해야 하는지 이해하는 데 도움이 되는 몇 가지 예를 살펴보겠습니다.

3. (문자열) 대  toString()

우리가이 고려 개체 변수를 우리가 확보 할 문자열 . 어떤 구문을 사용해야 합니까?

계속 진행하기 전에 다음 유틸리티 메서드는 주제를 설명하는 데만 사용된다는 점을 강조해야 합니다. 실제로, 우리는 이와 같은 유틸리티 메소드를 사용하지 않을 것입니다.

먼저 ObjectString 으로 캐스팅하는 간단한 유틸리티 메서드를 소개하겠습니다 .

public static String castToString(Object object) {
    if (object instanceof String) {
        return (String) object;
    }
    return null;
}

보시다시피 캐스팅하기 전에 객체 변수가 String 의 인스턴스인지 확인해야 합니다 . 그렇지 않으면 실패하고 ClassCastException을 생성할 수 있습니다 .

@Test(expected = ClassCastException.class)
public void givenIntegerObject_whenCastToObjectAndString_thenCastClassException() {
    Integer input = 1234;

    Object obj = input;
    String str = (String) obj;
}

그러나 이 작업은 널로부터 안전합니다. 이전에 String 변수 에 적용한 적이 없더라도 인스턴스화되지 않은 변수에 사용하면 성공합니다.

@Test
public void givenNullInteger_whenCastToObjectAndString_thenSameAndNoException() {
    Integer input = null;

    Object obj = input;
    String str = (String) obj;

    assertEquals(obj, str);
    assertEquals(str, input);
    assertSame(input, str);
}

이제 요청된 객체에서 toString()호출하는 다른 유틸리티 함수를 구현할 차례입니다 .

public static String getStringRepresentation(Object object) {
    if (object != null) {
        return object.toString();
    }
    return null;
}

이 경우 객체의 유형을 알 필요가 없으며 typecasting 없이 객체에서 성공적으로 실행할 수 있습니다. 간단한 null 검사 만 추가하면 됩니다. 이 검사를 추가하지 않으면 인스턴스화되지 않은 변수를 메서드에 전달할 때 NullPointerException이 발생할 수 있습니다 .

@Test(expected = NullPointerException.class)
public void givenNullInteger_whenToString_thenNullPointerException() {
    Integer input = null;

    String str = input.toString();
}

또한 핵심 String 구현 으로 인해 String 변수 에서 toString() 메서드를 실행 하면 동일한 객체가 반환됩니다.

@Test
public void givenString_whenToString_thenSame() {
    String str = "baeldung";

    assertEquals("baeldung", str.toString());
    assertSame(str, str.toString());
}

다시 질문으로 돌아가 보겠습니다. 객체 변수에 어떤 구문을 사용해야 합니까? 위에서 보았듯이 변수가  String 인스턴스 라는 것을 알고 있으면 유형 캐스팅을 사용해야 합니다 .

@Test
public void givenString_whenCastToObject_thenCastToStringReturnsSame() {
    String input = "baeldung";
    
    Object obj = input;
    
    assertSame(input, StringCastUtils.castToString(obj));
}

이 접근 방식은 일반적으로 추가 함수 호출을 수행할 필요가 없기 때문에 더 효율적이고 빠릅니다. 그러나 StringObject전달해서는 안 된다는 것을 기억합시다 . 이것은 우리에게 코드 냄새가 있음을 암시합니다.

다른 객체 유형 을 전달할 때 toString() 메서드를 명시적으로 호출해야 합니다 . 구현에 따라 String 값을  반환한다는 것을 기억하는 것이 중요합니다 .

@Test
public void givenIntegerNotNull_whenCastToObject_thenGetToStringReturnsString() {
    Integer input = 1234;

    Object obj = input;

    assertEquals("1234", StringCastUtils.getStringRepresentation(obj));
    assertNotSame("1234", StringCastUtils.getStringRepresentation(obj));
}

4. 결론

이 짧은 사용방법(예제)에서는 문자열 유형 캐스팅과 toString() 메서드를 사용하여 문자열 표현 가져오기의 두 가지 접근 방식을 비교했습니다 . 예제를 통해 차이점을 설명하고 언제 ( String) 또는 toString() 을 사용해야 하는지 살펴보았습니다 .

항상 그렇듯이 기사의 전체 소스 코드는 GitHub에서 사용할 수  있습니다 .

Junit footer banner