본문 바로가기
Java/Java with Error

[해결 방법] java.io.InvalidClassException

by HJ0216 2023. 2. 17.

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Exception

Java에서 다음 Source Code를 실행할 경우,

package member;

import java.io.Serializable;

public class MemberDTO implements Comparable<MemberDTO>, Serializable { 
	private String name;
	private int age;
	private String phone_num;
	private String address;
	
	public MemberDTO() {}
	
	public MemberDTO(String name, int age, String phone_num, String address) {
		this.name = name;
		this.age = age;
		this.phone_num = phone_num;
		this.address = address;
	}
	
	public void setName(String name) {this.name=name;}
	public void setAge(int age) {this.age=age;}
	public void setPhone_num(String phone_num) {this.phone_num=phone_num;}
	public void setAddress(String address) {this.address=address;}
	
	public String getName() {return name;}
	public int getAge() {return age;}
	public String getPhone_num() {return phone_num;}
	public String getAddress() {return address;}
	
	@Override
	public String toString() {
		return name		 + "\t"
			 + age 		 + "\t"
			 + phone_num + "\t"
			 + address;
	}

	@Override
	public int compareTo(MemberDTO mDTO) {
		return name.compareTo(mDTO.getName());
	}
	
}
package member;

import java.util.List;
import java.util.Scanner;

import java.util.Comparator;
import java.util.Collections;

public class MemberNameAsc implements Member {

	Scanner scan = new Scanner(System.in);

	@Override
	public void execute(List<MemberDTO> list) {
		
		// Comparable
		Collections.sort(list);
		
		System.out.println("\n이름\t나이\t핸드폰\t주소");
		for(MemberDTO mDTO : list) {
			System.out.println(mDTO + "  ");
		}
		
	} // execute

} // class

java.io.InvalidClassException 발생

 

 

Exception 원인

MemberDTO에서 comparator로 정렬된 파일을, Comparable을 적용시켜 해당 파일을 불러올 경우 발생

(저장할 때 사용한 serialVersionUID과 load할 때 사용한 serialVersionUID이 상이하여 발생)

 

 

해결 방법

사용할 정렬 기준(Comparable, Comparator)으로 파일을 저장한 후 같은 기준에서 해당 파일을 불러와야 함

 

 

참고 자료

📑 컴퓨터 학원 동기