본문 바로가기
자바

[Java] 타입 변환 오류(ClassCastException) 해결하기

by 멋진 개구리 2025. 3. 15.
반응형

개발하다 보면, Object 타입으로 받은 데이터를 특정 클래스로 형 변환(Casting)하는 과정에서 오류가 발생할 때가 있습니다. 특히, 문자열을 정수 타입으로 단순 변환하려 시도하거나, 컬렉션에서 잘못된 타입을 꺼내올 때 자주 볼 수 있습니다.

 

1. 문제 상황 코드 예시

아래 코드는 문자열 형태로 저장된 숫자를 강제로 Integer로 변환하려다가 발생한 에러 예시입니다.

public class TypeCastErrorExample {
    public static void main(String[] args) {
        Object numberString = "123";  // 실제로는 String 타입

        // 강제 변환을 시도 (잘못된 캐스팅)
        Integer num = (Integer) numberString;
        
        System.out.println("정수 값: " + num);
    }
}

2. 발생 오류

위 코드를 실행하면 다음과 같은 오류가 발생합니다:

Exception in thread "main" java.lang.ClassCastException: class java.lang.String 
cannot be cast to class java.lang.Integer
...

간단히 말해, String 객체를 Integer로 바로 캐스팅할 수 없어서 생기는 오류입니다.

 

3. 원인

  • ClassCastException: 자바는 런타임 시점에 객체의 실제 타입이 변환하려는 타입과 호환되지 않으면 예외를 던집니다.
  • 여기서는 "123"이라는 String 타입 객체가 실제로 Integer 클래스의 인스턴스가 아니기 때문에 변환이 불가능합니다.

4. 해결 방법

  1. 올바른 방법으로 파싱하기
    • 문자열을 정수로 바꾸려면 Integer.parseInt() 등 파싱 메서드를 사용해야 합니다.
    • String numberString = "123";
      Integer num = Integer.parseInt(numberString);
      System.out.println("정수 값: " + num); // 123
  2. 컬렉션에서 타입을 다룰 때 주의하기
  • 제네릭(Generics)을 정확히 선언해, 컴파일 시점부터 타입 안전성을 보장하세요.
  • List<Integer> list = new ArrayList<>(); 식으로 작성해서 잘못된 객체가 들어가지 않도록 합니다.

5. 정리

  • ClassCastException은 주로 “런타임”에 발생하며, instanceof 연산자나 제네릭을 통해 미리 방지할 수 있습니다.
  • 문자열을 숫자로 바꾸려면 반드시 파싱을 거쳐야 합니다.
  • 컬렉션 사용 시에는 제네릭을 적극 사용하여 컴파일 시점에 오류를 잡도록 유도하는 것이 좋습니다.
  • 자바는 깐깐한 언어이다. 

위 과정을 숙지하고, 항상 실제 객체의 타입캐스팅하려는 타입을 정확히 확인한다면, 개발 중 만날 수 있는 타입 변환 오류를 손쉽게 예방할 수 있습니다.

반응형

'자바' 카테고리의 다른 글

[자바 초보자를 위한] 간단한 학생 성적 계산 프로그램 만들기  (2) 2024.04.24
자바 클래스 타입 확인  (1) 2023.09.04
[Java] cannot be cast to java.lang.String 해결  (0) 2023.06.26
jdk-설치  (0) 2022.09.21
제네릭  (0) 2021.04.07

댓글