반응형
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]);
}
}
반응형
'Book > Effective Java' 카테고리의 다른 글
[교재 EffectiveJava] 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2021.10.19 |
---|---|
[교재 EffectiveJava] 아이템 18. 상속보다는 컴포지션을 사용하라 (0) | 2021.10.18 |
[교재 EffectiveJava] 아이템 17. 변경 가능성을 최소화하라 (0) | 2021.10.17 |
[교재 EffectiveJava] 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 (0) | 2021.10.15 |
[교재 EffectiveJava] 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2021.10.14 |