본문 바로가기

개발 이모저모

(String) , .toString() 차이점

728x90
반응형
   String userId = requestMap.getOrDefault("userId", "").toString();
   
   String userId = (String)requestMap.getOrDefault("userId", "");

 

서버 소스를 구현하다보면 타입변환하는 이 두가지 방법을 쉽게 접할 수 있다. 하지만 변한과 관련된 미묘한 동작 차이가 있다.


 

1.    String userId = requestMap.getOrDefault("userId", "").toString();

- 이 소스에서 .toString()은 모든 객체에 적용 가능하고, 반환된 값이 어떤 객체라도 호출 할 수 있다. Integer, Double, null 등이 반환되더라도 .toString()을 호출 할 수 있다.

<예시>

Map<String, Object> requestMap = new HashMap<>();
requestMap.put("userId", 123); // `Integer` 타입 값 저장

String userId = requestMap.getOrDefault("userId", "").toString();
System.out.println(userId); // 출력: "123"

 

 

2.    String userId = (String)requestMap.getOrDefault("userId", "");

- 반환된 값이 String이 아니면 ClassCastException이 발생한다. 꼭! 타입이 일치해야한다!
   만약, requestMap에 지정된 값이 String이 아닌 다른 타입(ex: Integer)라면 캐스팅 오류가 발생하는 것이다.

Map<String, Object> requestMap = new HashMap<>();
requestMap.put("userId", 123); // `Integer` 타입 값 저장

String userId = (String) requestMap.getOrDefault("userId", ""); 
// ClassCastException 발생

 

 

3. 차이점

안전성 반환된 값이 어떤 타입이든 toString() 호출 가능 반환된 값이 String 타입이 아닌 경우 예외 발생
유연성 모든 타입에 대해 동작 String 타입으로 제한
예외 상황 null도 안전하게 처리 가능 (결과: "null") null일 경우에도 문제 없음
명확성 타입 불일치가 있을 때 디버깅이 어려울 수 있음 값이 반드시 String 타입이어야 함을 보장

 

 

.toString() ➡ 값이 다양한 타입일 가능성이 있고, 이를 문자열로 변환하려는 의도라면 이 함수를 사용하는걸 추천한다!

(String) ➡ 값이 반드시 String 타입이어야 하는 경우에 사용하는 것을 추천한다! String 타입을 보장하기 때문이다.

 

 

728x90
반응형