쉽게 쉽게

Map에 있는 값 형변환하기 본문

개발공부/Java

Map에 있는 값 형변환하기

곱마2 2023. 11. 19. 15:41
반응형

1. 이슈

페이징을 구현하는 과정에서 Map에 있는 값을 int로 가져와서 사용해야 하는 일이 있었다.

그러나 int로 강제 형변환해서 사용하면 될 거라 단순하게 생각했지만 오류가 발생했다.

int current_page = 	(Integer)map.get("current_page");

-- java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 발생

이를 올바르게 해결하려고 했다.

 

2.  Map에 있는 값 형변환하기

첫번째로 Stiring -> int로 전환하여 사용하려 했다.

int current_page = Integer.parseInt((String)map.get("current_page"));

-- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 발생

그러나 이 또한 casting 오류가 발생했다. (실패)

 

두 번째로 Stirng.valueOf를 활용하여 변환 후 이를 다시 int로 전환했다.

int x = Integer.parseInt(String.valueOf(map.get("current_page")));

이 방법은 casting 오류 없이 성공했다.

 

사용된 메서드를 살펴보자면

public static int parseInt(String s) throws NumberFormatException {
        return parseInt(s,10);
    }

Integer.parseInt() 메서드는 매개변수를 String으로 받는다.

때문에 Object값을 먼저 String으로 변환하고 이를 다시 int로 출력할 수 있다.   

 

String.valueOf() 메서드를 통해서 Object String으로 변환을 시켜줬다.

하지만 매개변수가 String으로 들어가면 되기 때문에 toString()을 사용하여 진행해도 오류가 발생하지 않는다.

int current_page = 	Integer.parseInt(map.get("current_page").toString());

 

그러나 변경하고자 하는 Object가 null인 경우에 결과가 달라진다.

toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 
valueOf는 "null"이라는 문자열로 처리한다.

 

즉 정리하면
  • String.valueOf() - 파라미터가 null이면 문자열 "null"을 만들어서 반환
  • toString() - 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니어도 출력
 NPE가 나타나는 것보다 null값이 반환되어 표시되는 것이 훨씬 디버그하기 좋기때문에 valueOf를 사용하는 것을 추천한다.

 

참고

https://mamm.tistory.com/14

 

Map<String, Object>의 안에 Object를 int로 바꾸는 방법

Spring Tool Suite 4 springboot 에서 PostgerDB를 이용하여 사용자의 로그인 요청이 오면, 아이디와 패스워드를 확인하여 결과값을 반환하기 위함. ※ UserRepository (JPA extends)는 작성되어있다는 가정 작성한

mamm.tistory.com

https://swjeong.tistory.com/146

 

[Java] toString()과 String.valueOf()의 차이점

두 메소드 모두 Object의 값을 String으로 변환하지만 변경하고자 하는Object가 null인 경우 다르다.toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 valueOf는 "null"이라는 문자열로 처리한다.

swjeong.tistory.com

잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.

 

 

 

반응형

'개발공부 > Java' 카테고리의 다른 글

[Java] 약수의 개수 구하기  (0) 2024.09.15
[Java] FILE 업로드(다중)  (0) 2024.04.28
입출력I/O  (0) 2023.03.31
스트림  (0) 2023.03.31
람다식  (0) 2023.03.29