1. 소개
이 기사에서는 String 캐스팅과 toString() 메서드 실행의 차이점에 대해 간략하게 설명 합니다 . 두 구문을 간략하게 검토하고 각각의 사용 목적을 설명하는 예를 살펴보겠습니다. 마지막으로 어느 것이 더 나은 접근 방식인지 살펴보겠습니다.
2. 스트링 타입 캐스팅과 toString() 메소드
빠른 요약을 통해 시작하겠습니다. (String) 구문을 사용하는 것은 Java의 유형 캐스팅 과 엄격하게 연결됩니다 . 간단히 말해서 이 구문을 사용하는 주요 작업은 소스 변수를 String 으로 캐스팅하는 것입니다 .
String str = (String) object;
우리가 알고 있듯이 Java의 모든 클래스는 직접 또는 간접적으로 toString () 메서드 를 구현 하는 Object 클래스 의 확장 입니다. 우리는 그것을 사용하여 모든 Object 의 String 표현 을 얻습니다 .
String str = object.toString();
이제 우리는 짧은 요약을 만들었으므로 각 접근 방식을 언제 사용해야 하는지 이해하는 데 도움이 되는 몇 가지 예를 살펴보겠습니다.
3. (문자열) 대 toString()
우리가이 고려 개체 변수를 우리가 확보 할 문자열 . 어떤 구문을 사용해야 합니까?
계속 진행하기 전에 다음 유틸리티 메서드는 주제를 설명하는 데만 사용된다는 점을 강조해야 합니다. 실제로, 우리는 이와 같은 유틸리티 메소드를 사용하지 않을 것입니다.
먼저 Object 를 String 으로 캐스팅하는 간단한 유틸리티 메서드를 소개하겠습니다 .
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));
}
이 접근 방식은 일반적으로 추가 함수 호출을 수행할 필요가 없기 때문에 더 효율적이고 빠릅니다. 그러나 String 을 Object 로 전달해서는 안 된다는 것을 기억합시다 . 이것은 우리에게 코드 냄새가 있음을 암시합니다.
다른 객체 유형 을 전달할 때 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() 을 사용해야 하는지 살펴보았습니다 .