오늘은 자바 Collection Framework 에 대해서 정리해보려고 한다.
이것 외에도 정리할 것이 산더미 같은데 일단 우선순위가 높은 것부터 시간 날 때마다 적어두어야지...
Collection Framework 전체를 살펴보면 위 그림과 같다.
그림에 있는 것들 중 빨간 색으로 칠한 List를 먼저 알아보자.
컬렉션 프레임워크란 ?
자바에서 데이터를 저장하고 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것
즉, 사용자들이 이용하기 쉽게 정리해놓은 라이브러리라고 할 수 있다.
컬렉션 프레임워크의 인터페이스 간의 상속관계는 최상단의 그림과 같다고 볼 수 있다.
그중 가장 큰 줄기인 Collection에 속해있는 List, Set 그리고 Map이 무엇인지 어떤 것들이 있는지 알아보자.
Collection
List와 Set은 Collection 인터페이스를 상속받아서 구성되기 때문에 해당 Collection 인터페이스를 먼저 살펴보자.
Collection 인터페이스에서는 여러 기본 동작에 관련된 메서드가 정의되어있는데 해당 내용들은 다음과 같다.
타입 | 메서드 | 설명 |
boolean | add(E e) | 해당 컬렉션의 전달된 요소를 추가함 |
void | clear() | 해당 컬렉션의 모든 요소를 제거함 |
boolean | contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함 |
boolean | equals(Obeject o) | 해당 컬렉션과 전달된 객체가 같은지를 확인함 |
boolean | isEmpty() | 해당 컬렉션이 비어있는지를 확인함 |
boolean | remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함 |
int | size() | 해당 컬렉션의 요소의 총 개수를 반환함 |
Object[] | toArray() | 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함 |
모든 메서드를 확인하고 싶다면 아래 링크를 확인하면 된다.
List
List 인터페이스에 속해있는 모든 클래스는 다음과 같은 특징을 가진다.
- 요소의 저장 순서가 유지
- 같은 요소의 중복 저장 허용
List 인터페이스에서 정의된 주요 메서드는 다음과 같다
(상단에 기재한 Collection 메서드도 물론 포함되지만 중복해서 기재하지는 않았다)
타입 | 메서드 | 설명 |
E | get(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 반환함 |
boolean | remove(int index) | 해당 리스트에서 특정 위치에 존재하는 요소를 제거함 |
E | set(int index, E e) | 해당 리스트에서 특정 위치에 존재하는 요소를 전달받은 객체로 대체함 |
List의 모든 메서드도 확인하고 싶다면 아래 링크를 확인하면 된다.
ArrayList
ArrayList는 알고리즘을 풀 때 가장 많이 사용했던 클래스로써 Collection -> List -> ArrayList 순서로 상속을 받았기 때문에 위에 기재한 모든 메서드들을 사용할 수 있다.
배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다.
하지만 배열의 크기를 변경할 수 없어서 크기를 늘리기 위해선 새로운 배열을 생성 후 기존의 요소를 옮겨야 한다.
위 과정은 자동으로 수행되지만 느리기 때문에 요소의 추가 및 삭제 작업이 빈번하게 일어난다면 ArrayList 사용을 권장하지 않는다.
LinkedList
ArrayList가 배열의 요소를 저장함으로써 생기는 단점 극복을 위해 고안.
내부에서 연결 리스트를 통해 요소를 저장
그래서 ArrayList의 단점이라고 할 수 있는 요소의 추가 및 삭제가 빠르다.
하지만 탐색 부분에 있어서는 ArrayList 보다 느리기 때문에 장단점을 숙지하고 사용하자..!
Stack
선형 구조로 되어있으며 후입 선출(LIFO : Last In First Out)의 구조를 가지고 있다.
Vector(ArrayList와 거의 흡사하고 거의 사용되지 않아서 설명 X) 클래스를 상속받아서 사용한다.
구성된 메서드는 다음과 같다.
타입 | 메서드 | 설명 |
boolean | empty() | 해당 스택이 비어 있으면 true, 비어 있지 않으면 false를 반환 |
E | peek() | 해당 스택의 제일 상단에 있는 요소를 반환 |
E | pop() | 해당 스택의 제일 상단에 있는 요소를 반환하고 해당 요소를 스택에서 제거 |
E | push(E item) | 해당 스택의 제일 상단에 전달된 요소를 삽입 |
int | search(Object o) | 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환 |
Queue
큐는 스택과 다르게 별도의 인터페이스 형태로 제공된다.
구조는 선입선출(FIFO : First In First Out)의 구조를 가지고 있다.
큐 메모리 구조를 표현하기 위해 아래와 같은 메서드만을 상속받아 사용한다.
타입 | 메서드 | 설명 |
boolean | add(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입 삽입에 성공시 true, 실패시 IllegalStateException 을 발생시킴 |
E | element() | 해당 큐의 맨 앞에 있는 요소를 반환 |
boolean | offer(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입 |
E | peek() | 해당 큐의 맨 앞에 있는 요소를 반환, 만약 비었다면 null 반환 |
E | poll() | 해당 큐의 맨 앞에 있는 요소를 반환하고 해당 요소를 큐에서 제거 만약 큐가 비었다면 null을 반환 |
E | remove() | 해당 큐의 맨 앞에 있는 요소를 제거 |
Set과 Map은 추후 글에서 추가적으로 정리하도록 하겠다.
자바 컬렉션 프레임워크(Java Collection Framework) 목록
자바 컬렉션 프레임워크(Java Collection Framework) 중 셋(SET) 정리
자바 컬렉션 프레임워크(Java Collection Framework) 중 맵(MAP) 정리
참고한 사이트
http://www.tcpschool.com/java/java_collectionFramework_concept
http://www.tcpschool.com/java/java_collectionFramework_list
http://www.tcpschool.com/java/java_collectionFramework_stackQueue
'Computer Science > JAVA' 카테고리의 다른 글
자바 컬렉션 프레임워크(Java Collection Framework) 중 맵(MAP) 정리 (0) | 2022.04.18 |
---|---|
자바 컬렉션 프레임워크(Java Collection Framework) 중 셋(SET) 정리 (0) | 2022.04.15 |
[JAVA] 객체 지향 프로그래밍(Object Oriented Programing) (0) | 2022.01.11 |
JAVA의 장점과 단점 (1) | 2021.12.20 |
JAVA 란? (0) | 2021.12.16 |