배열과 리스트는 비슷하지만 다른 특성을 가진다.
일단 배열은 동적생성이 된다지만 한번 만들때 정한 크기 이상은 만들수 없다는것.
리스느는 크기의 제한이 딱히 없다는것이 차이이다. 라고 일반적으로 설명한다.

하지만 자바 1.5이후부터 제네릭이 생기면서 한가지 더 차이점이 발생했다.
공변과 불변 쉽게 말해서 배열은 캐스팅이 되는데 리스트는 캐스팅이 안된다. 라는것이다.

String 배열은 Object 배열로 캐스팅 할수 있지만 List<String>은 List<Object>가 될수 없다.
물론 ArrayList<String> 에서 List<String>이 될수는 있다.
코드 상에서 강제로 캐스팅을 해주려고 해도 컴파일 에러가 발생한다.

따라서 배열을 잘못 캐스팅 했을 경우에는 런타임중 ClassCastException이 발생하는데 코드 작성중에 잘못된 부분을 찾을수 있다는 장점이 있다.

이 항목 후반에는 동기화/동시성에 관한 내용들로 작성되어있는데 요점은 한가지이다
List같은 자료구조를 동기화 해서 사용하게 된다면 복사해서 사용하자. 라는내용이다.
List<E> newlist=new ArrayList<E>(list) 의 형태로 복사 생성해서 syncronyzed 되는 시간을 최대한 짧게 하자. 라는 내용이다.

결론은 반드시 배열이 필요한 부분이 아니라면 왠만하면 리스트같은 콜랙션에 있는 자료구조를 사용하자.
Posted by 동적할당
: