Mutable fields should not be "public static"

eunsol Jo·2022년 12월 14일
0

☕️  Java

목록 보기
4/4
post-thumbnail
public static final List<String> FINAL_COLLECTIONS = Arrays.asList("A", "B", "C");

list 를 위와 같이 final로 선언해주었음에도 sonar cube에서 이는 변수 재선언을 막아줄뿐, 상태를 변경하는 것을 막을 수 없다고 경고한다. 즉 FINAL_COLLECTIONS.add("D"); // 가능 와 같이 해당 객체에 대한 완전한 immutable 상태를 보장하지 않는다는 의미이다.

이를 해결하기 위해서는 세가지 방법이 있다.

1. 접근제한자를 통해 immutable하게 처리

private static final SomeType [] SOMETHINGS = { ... };
public static final getSomethings() {return SOMETHINGS;}

2. unmodifiableList

private static final SomeType [] THE_THINGS = { ... };
public static final List<SomeType> SOMETHINGS =
  Collections.unmodifiableList(Arrays.asList(THE_THINGS));

immutable 객체를 수정한다면 java.lang.UnsupportedOperationException
이 발생한다.

3. List.of

public static final List<String> FINAL_COLLECTIONS = List.of("A", "B", "C");

java9 부터는 immutable 컬렉션 생성을 위한 인터페이스를 제공을 통해 보다 간결한 문법을 지원한다.

참조.
CERT, OBJ13-J. - Ensure that references to mutable objects are not exposed

profile
Later never comes 👩🏻‍💻

0개의 댓글