본문 바로가기

TIL

<자바 Java> 컬렉션 프레임워크(Collection Framework) (1) - List

- List 컬렉션

List 컬렉션은 객체를 한 줄로 늘어놓은 것이다. 가장 큰 특징으로는, 객체를 인덱스로 관리한다는 것이다. 따라서 인덱스로 객체를 검색, 삭제할 수 있다. 또한 List 컬렉션은 객체 자체를 저장하는 것이 아니라, 참조 변수처럼 객체의 번지를 저장한다.

 

List 컬렉션의 List 인터페이스는 기본적으로 제네릭 타입을 가지며, 구체적 타입은 객체를 생성할 때 결정한다. 기본적으로 사용되는 메서드는 객체 추가 시 add(), 가져올 때 get(), 삭제는 remove()이다.

 

 

1) ArrayList

List 컬렉션의 List 인터페이스를 구현한 클래스이다. Array + List이기 때문에, Array의 특성을 합쳤다고 생각하면 이해하기 쉽다. 다만 기본적인 Array와의 차이점은 배열의 크기가 고정되어있지 않고 늘어난다는 것이다.

*List 컬렉션 = List 인터페이스 <- ArrayList 클래스

 

ArrayList의 생성은 다음과 같다.

List<E> list = new ArrayList<E>();

 

주의할 점으로는, 자바 4 이전까지는 ArrayList에 객체를 저장하고 나면 찾아올 때는 형변환이 필요하다는 것이다. 이 불편함을 해소하고자 자바 5부터는 형변환 없이 객체를 처음 생성할 때 바로 구체적인 객체 타입을 저장하도록 되었다.

 

ArrayList는 객체 중간에 새로운 객체를 추가하거나 기존의 객체를 삭제 시, 빈공간 없이 뒤 기존 객체를 뒤로 밀거나 혹은 객체를 앞당겨오는 식으로 구성된다. 따라서 이런 상황이 자주 일어나는 경우에는 ArrayList보다 LinkedList를 사용하는 것이 권장된다.

 

 

2) Vector

역시 List 컬렉션의 List 인터페이스를 구현한 클래스이다. 내부 구조는 ArrayList와 동일하나, 메소드가 동기 방식으로 이루어져 있기 때문에 메소드들을 동시에 실행하는 것이 불가능하다(순서대로 이루어진다). 이것은 안전하게 객체가 관리되는 이점이기도 하다.

 

 

3) LinkedList

역시 List 컬렉션의 List 인터페이스를 구현한 클래스이다. ArrayList와 사용방법은 같지만, 내부 구조가 다르다. 인덱스로 객체를 관리하는 것이 아닌, 일렬로 나열되어 있는 객체들을 앞뒤로 연결하여 앞뒤의 객체를 주소로 하여 저장된다. 따라서 객체 추가나 삭제 시에도 빈공간을 메꾸는 것이 아닌, 앞뒤 객체의 주소만 변경되는 식이다. 객체를 추가하면 앞뒤 객체와 새로 연결하고, 객체를 삭제하면 앞뒤의 객체를 서로 연결하여 주소를 변경한다. 따라서 ArrayList보다 중간에 객체를 추가, 삭제할 때 더 빠른 속도를 내는 것이다.

 

 

 

 

 

참고 : 도서 <이것이 자바다>

'TIL' 카테고리의 다른 글

<HTML> 기본 태그들 (1)  (0) 2021.11.15
<자바 Java> 기본 API - StringTokenizer 클래스  (0) 2021.11.14
<자바스크립트> Ajax  (0) 2021.11.12
<트러블슈팅> getPathInfo() = null 에러  (0) 2021.11.11
<자바 Java> JSP 요소  (0) 2021.11.10