[자바 이클립스 Warning] The serializable class does not declare a static final serialVersionUID field of type long

Yoon Seo Jin·2024년 1월 18일
0

Java

목록 보기
3/7

The serializable class does not declare a static final serialVersionUID field of type long
serializable 클래스가 long 타입의 정적 final serialVersionUID 필드를 선언하지 않습니다.

발생 개요

ArrayLIst 생성 방법엔 다음 네 가지가 있다.

ArrayList<String> al = new ArrayList<String>(); // 생성, 선언 only
ArrayList<String> al = new ArrayList<String>() {
	{
    	add("a");
        add("b");
    }
}; //익명 객체 생성을 통해 생성, 선언과 동시에 원소 삽입
ArrayList<String> al = new ArrayList<String>(Arrays.asList("a", "b"));
//컬렉션을 parameter로 하는 생성자 이용
//java.util.Arrays 클래스의 매소드_ Arrays의 private 정적 클래스인 ArrayList를 리턴
ArrayList<String> al = new ArrayList<String>(List.of("a", "b"));
//컬렉션을 parameter로 하는 생성자 이용
..List 인터페이스의 메소드_

Scanner을 통해 요소를 입력 받아 ArrayList에 저장하는 코드를 작성하면서, 익명 객체를 생성하는 위 두 번째 방법을 사용해보았다.

다음과 같이 생성자 키워드에서 Warning이 뜨게 된다.

발생 원인

1. serialVersionUID란?

객체를 파일에 작성/전송하기 위해선 객체 클래스Serializable Interfaceimplement한 후(직렬화를 위한 과정) 직렬화 과정을 거친다.
serialVersionUID란 직렬화에 사용되는 고유 아이디로, 미 선언 시 JVM이 자동 생성한다.

2. 경고 발생 이유

Java에서 이를 명시적으로 선언할 것을 적극 권장하기 때문이다.

해결 방법

일단, Warning이므로 무시해도 실행 시 문제가 발생하진 않는다. 허나 해결을 위한다면:

  1. 이클립스) 자동 선언 플러그인을 통해 생성
  2. 클래스 위 @SuppressWarnings("serial") 어노테이션 처리 (근본적 해결책은 아님)

출처

코딩창고 님의 티스토리 「serialVersionUID 이란? Warning 해결하기」
seungkyua 님의 데보션 블로그 「Python, Javascript, Go, Java 언어의 Data Structure 활용 방법 비교」
minjara 님의 네이버 블로그 「Arrays.asList()」

참고자료

Serialization에 대한 설명(행복만땅 개발자님의 티스토리_「serialVersionUID 자동생성하기」)

더 공부할 내용

❓ List(java.util의 인터페이스), Arrays(java.util의 클래스), ArrayList(List를 상속받는 java.util의 클래스), Array의 차이
Arrays.asListList.of 메소드의 차이
Arrays.asList의 return 원리

profile
this blog is synchronized w/ notion; currently not accessible

0개의 댓글