계약 위반
Arrays.asList는 배열 길이를 그대로 반영하는 고정 크기 뷰입니다. 크기를 바꾸려면 new ArrayList<>(view)로 복사해야 합니다. 완전 불변 값 목록은 List.of 또는 List.copyOf로 의도를 드러냅니다.
재현Arrays.asList에 add를 호출하는 크기 변경
Arrays.asList는 배열 길이를 그대로 반영하는 고정 크기 뷰입니다. 크기를 바꾸려면 new ArrayList<>(view)로 복사해야 합니다. 완전 불변 값 목록은 List.of 또는 List.copyOf로 의도를 드러냅니다.
재현PracticalStudyList는 내부 저장소로 ArrayList를 선택하고 외부 조회에는 List.copyOf 스냅숏을 반환합니다. 첫 스냅숏을 만든 뒤 새 항목을 추가해도 이전 결과가 바뀌지 않습니다. 내부 구현과 외부 불변 계약을 서로 다르게 선택할 수 있습니다.
구현핵심: 표준 구현 이름보다 계약을 먼저 고릅니다. 가변 여부, 순서, 중복, null, 스냅숏 여부를 정한 뒤 성능 특성으로 구현을 좁힙니다. LinkedList를 단순히 중간 삽입 표만 보고 고르는 선택은 피합니다.