[Java Error] ClassCastException 해결 방법
Java 개발을 하다 보면 ClassCastException
에러를 종종 마주할 수 있습니다. 특히, 문자열(String)을 정수(Integer)로 변환하는 과정에서 java.lang.String cannot be cast to java.lang.Integer
라는 에러가 발생하는 경우가 많습니다. 이번 포스팅에서는 이 에러의 원인과 해결 방법을 알아보겠습니다.
1️⃣ 에러 상황
아래 코드를 실행할 때 ClassCastException
이 발생한다고 가정합니다:
commandMap.put("seq", Integer.parseInt((String) commandMap.get("seq")));
에러 메시지:
Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
2️⃣ 에러 원인
이 에러는 commandMap.get("seq")
가 반환한 값이 문자열(String)이 아니거나, 캐스팅 방식에 문제가 있을 때 발생합니다.
- 문자열(String) 값을 정수(Integer)로 변환하는 과정:
commandMap.get("seq")
에서 반환된 값이 문자열(String)이 아닐 경우 문제가 발생합니다.
- 반환된 값이
null
, Integer
, 혹은 다른 객체일 경우 캐스팅에 실패하게 됩니다.
3️⃣ 해결 방법
아래 단계를 통해 문제를 해결할 수 있습니다.
Step 1. 값이 문자열인지 확인하기
Object value = commandMap.get("seq");
if (value instanceof String) {
try {
int seq = Integer.parseInt((String) value);
commandMap.put("seq", seq);
} catch (NumberFormatException e) {
System.out.println("값을 정수로 변환할 수 없습니다: " + value);
}
} else {
System.out.println("값이 문자열이 아닙니다: " + value);
}
Step 2. null 처리
Object value = commandMap.get("seq");
if (value != null && value instanceof String) {
try {
int seq = Integer.parseInt((String) value);
commandMap.put("seq", seq);
} catch (NumberFormatException e) {
System.out.println("값을 정수로 변환할 수 없습니다: " + value);
}
} else {
System.out.println("값이 null이거나 문자열이 아닙니다.");
}
Step 3. 단순화된 코드
String value = (String) commandMap.get("seq");
if (value != null) {
try {
int seq = Integer.parseInt(value);
commandMap.put("seq", seq);
} catch (NumberFormatException e) {
System.out.println("값을 정수로 변환할 수 없습니다: " + value);
}
} else {
System.out.println("값이 null입니다.");
}
4️⃣ 안전한 변환 예제
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Object> commandMap = new HashMap<>();
commandMap.put("seq", "123");
// 값 가져오기 및 변환
Object value = commandMap.get("seq");
if (value != null && value instanceof String) {
try {
int seq = Integer.parseInt((String) value);
commandMap.put("seq", seq); // 변환된 정수 값 저장
System.out.println("변환 성공: " + seq);
} catch (NumberFormatException e) {
System.out.println("값을 정수로 변환할 수 없습니다: " + value);
}
} else {
System.out.println("값이 null이거나 문자열이 아닙니다.");
}
}
}
5️⃣ 정리
ClassCastException: java.lang.String cannot be cast to java.lang.Integer
는 주로 문자열 데이터 처리 과정에서 발생합니다.
이를 방지하려면:
- 데이터 타입(
String
)을 먼저 확인합니다.
null
값을 처리합니다.
NumberFormatException
예외를 처리합니다.
위의 방식을 적용하면 데이터 변환 시 발생하는 에러를 효과적으로 방지할 수 있습니다. 😊