Arrays.asList는 읽기만 가능하다
💬 Arrays.asList는 여러 값을 한 번에 입력해 List를 만들어주는 메서드입니다. 저는 이것을 자주 애용했습니다. 회사에서 이번에 API를 개발하면서 사용을 했는데 Arrays.asList를 통해 만들어진 List에 add 호출을 할 때 예외가 터졌습니다.
읽기만 가능한 이유?
✅ Arrays.asList로 List를 만들 경우 ArrayList가 하나 만들어집니다. 이 ArrayList안의 멤버 변수에 크기가 고정된 배열이 할당 되기 때문입니다.
➡ asList의 매개변수는 가변인자이며 각 값들이 합쳐진 배열로 만들어져 들어갑니다.
public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
➡ ArrayList로 넘어간 배열은 final 변수에 들어가기 때문에 배열의 크기가 고정이 되어버린 것이었습니다.
private final E[] a; ArrayList(E[] array) { a = Objects.requireNonNull(array); }
결론
💬 외부 라이브러리를 습관적으로 쓰다보면 이러한 문제들을 마주하게 됩니다. 그럴 때마다 내부에는 어떻게 동작을 하는지 파악을 하고 다음에는 그것들을 인지하고 사용해야겠다는 생각을 하게 되었습니다. 이런 것이 성장하게 하는 경험치가 아닐까 싶습니다.
'개발일지 > TIL' 카테고리의 다른 글
[240121] 어뷰징 관련 내부&외부 허가 IP 적용 (0) | 2024.01.21 |
---|---|
[231210] 필요 없는 Warning Log를 제외시키기 (0) | 2023.12.10 |
[231102] MySQL 데이터 분석을 위한 SQL 작성... 더 나아지기 (0) | 2023.11.02 |
[231030] MySQL 데이터 분석을 위한 SQL 작성 어려움... (0) | 2023.10.30 |
[231029] S3 데이터 이전하기 (0) | 2023.10.29 |