티스토리 뷰
project 소스를 Sonarqube로 분석을 해보니 다음과 같은 조치내역이 발견되었다.
Make field transient or serializable!
이 필드를 직렬화에서 제외 시키거나 직렬화를 시킬수 있도록 하라! 라고 해석할 수 있다.
하지만 dataRows라는 필드는 사용이 되어야 해서 transient를 하는 상황은 제외하도록 하겠다.
(transient 를 사용하면 직렬화할때 해당 필드를 제외하므로 역직렬화시 필드값이 null이 들어간다.)
이 소스를 클래스 정의 부분까지 확장시켜보면 다음과 같다.
public class ProjectDataset implements Serializable {
private static final long serialVersionUID = -4343334287593257531L;
...
private List dataRows = new ArrayList();
private Map varMap = new HashMap();
...
기본적으로 사용하는 Primitive Type (String, int...) 와 Serializable를 상속받은 객체는 별 문제가 되지 않는다. 하지만 List나 Map을 Generic하게 사용을 하면 고치라고 나온다. 이를 조치하는 방법은 필드를 명확하게, Serializable하게 정의를 해주는 것이다.
예를 들면 List dataRows 라고 정의한 부분은 List<ReqData> dataRows 와 같은 식으로 Type을 넣어주도록 하자. 그리고 여기 안에 들어가는 ReqData라는 model은 implements Serializable 해줘야 한다.
또한 Map varMap 이라고 정의한 부분은 Map<String, Serializable> varMap 이라고 정의를 해줘야 한다. 일반적으로 사용하는 Map<String, Object>도 Object가 Serializable 하지 않기 때문에 위와 같은 방법으로 변경을 해줘야 한다.
public class ProjectDataset implements Serializable {
private static final long serialVersionUID = -4343334287593257531L;
...
private List<ReqData> dataRows = new ArrayList<ReqData>();
private Map<String,Serializable> varMap = new HashMap<String,Serializable>();
...
끝!
'Lang > Java' 카테고리의 다른 글
Java 8 버전 이후 새로운 기능 정리 및 코드 예제 (펌) (0) | 2022.05.31 |
---|---|
JDK11 to JDK17 migration point & features (0) | 2022.05.31 |
파일 다운로드 시 Content-Disposition 한글 파일 이름 깨지는 오류 조치 (0) | 2022.01.25 |
[Java] java.io.IOException: Stream Closed 오류 조치 (1) | 2022.01.20 |
try-with-resources 사용하여 resource 관리 쉽게 하는 방법 (0) | 2022.01.12 |