Effective Java
[교재 EffectiveJava] 아이템 15-예제. static final array 변경하지 못하도록 설정하기
LearnerKSH
2021. 10. 14. 11:50
728x90
반응형
길이가 0 이상일 경우 변경 가능한 public static final array
public class ArrayTest {
public static final int[] VALUES = {1, 2, 3, 4};
}
값을 변경해보자
public class Main {
public static void main(String[] args) {
System.out.println(ArrayTest.VALUES[0]); // 1
ArrayTest.VALUES[0] = 5;
/* 변경이 된다 */
System.out.println(ArrayTest.VALUES[0]); // 5
}
}
해결방안 1
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ArrayTest2 {
private static final Integer[] VALUES = {1, 2, 3, 4};
/* 수정 불가능한 리스트 */
public static final List<Integer> VALUE_LIST
= Collections.unmodifiableList(Arrays.asList(VALUES));
}
변경할 수 없는 리스트
public class Main {
public static void main(String[] args) {
/* 변경 시도시 에러 발생 */
// ArrayTest2.VALUE_LIST.set(0, 5)
System.out.println(ArrayTest2.VALUE_LIST.get(0));
}
}
해결방안 2
public class ArrayTest3 {
private static final int[] VALUES = {1, 2, 3, 4};
/* 배열 복사 (깊은복사 clone) */
public static final int[] getValues() {
return VALUES.clone();
}
}
새롭게 복사된 배열 받기
public class Main {
public static void main(String[] args) {
/* copyArr 원소를 변경해도 ArrayTest3.VALUES 와는 무관 */
int[] copyArr = ArrayTest3.getValues();
System.out.println(copyArr[0]);
}
}
반응형