JVM/Java

[Java] 22년 부터는 Integer 타입을 사용할 때 조심하자!

Hyo Kim 2022. 1. 6. 20:56
728x90
반응형

😲서론

21년까지 잘 작동하던 Integer.valueOf() 에서 NumberFormatException이 발생했다.

🤔본론

(코드는 보기 쉽게 하기 위해 실제 코드와 다르게 작성하였습니다.)

public static void main(String[] args) { 
	String value = "2201060002";
    String defaultValue = "221060001";
    
    Optional.ofNullable(value)
    	.map(Integer::valueOf)
    	.map(num -> num += 1)
    	.map(String::valueOf)
    	.orElse(defaultValue);
}


간단한 패턴 값을 만드는 로직이었다.
패턴 - YYMMDDXXXX

해당일자의 고유한 값을 저장하기 위해서,
value값이 있으면 +1을 더하고, 없으면 defaultValue를 넣어주는 간단한 로직이었다.
그런데 22년도가 되자마자 Integer::valueOf 부분에서 NumberFormatException 가 발생했다.

해당원인은 값의 범위였다.

Integer의 범위

-2,147,483,648 ~ 2,147,483,647

21년도까지는 Integer의 범위 안에서 놀았지만, 22년도 부터는 Integer범위를 벗어 났던 것..

공부할 때는 Integer도 크다고 느꼈기에 범위를 생각하지 못 하고, 항상 기본으로 Integer를 사용하였었다.

하지만, 이번 계기로 Integer의 범위를 확실히 알 수 있었고

범위를 생각하지 못한 채 코드를 짠 내 실수를 깨닫게 되었다.

숫자가 어느정도 크다고 느껴지면 앞으로는 마음 편하게 Long을 써야겠다..

728x90
반응형