티스토리 뷰

project 소스를 Sonarqube로 분석을 해보니 다음과 같은 조치내역이 발견되었다. 

make field transient or serializable

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>();
    
    ...

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30