컬렉션 (Collection)
데이터를 저장하고 관리하는 Java의 가변 크기의 오브젝트 컨테이너를 컬렉션이라고 한다.
리스트, 트리, 해쉬, 셋, 큐, 맵 등의 자료구조가 여기에 포함된다.
인터페이스 (Interface)
컬렉션 프레임워크는 인터페이스와 클래스로 구성되어 있다.
인터페이스는 클래스가 어떤 식으로 구현되어야 하는지에 대해서 클래스의 동작 규칙을 정의하는 역할을 한다.
컬렉션 프레임워크
컬렉션 프레임워크 인터페이스의 하위 인터페이스로는 List, Queue, Set 인터페이스가 있다.
컬렉션 프레임워크에는 다음과 같은 메서드들이 정의되어 있으며 이는 컬렉션 프레임워크의 상속을 받는 인터페이스에서만 사용이 가능하다.
boolean add(E e) | 객체를 맨 끝에 추가한다. |
void clear() | 저정된 모든 객체를 제거한다. |
boolean contains(Object o) | 명시한 객체의 저장 여부를 검사한다. |
boolean isEmpty() | 리스트가 비어있는지 조사한다. |
iterator<E> iterator() | iterator를 반환한다. |
boolean remove(Object o) | 명시한 첫 번째 객체를 제거하고, 제거 여부를 반환한다. |
int size() | 저장된 전체 객체의 수를 반환한다. |
T[] toArray(T[] a) | 리스트를 배열로 반환한다. |
List interface
List interface에는 ArrayList, Stack, Vector, LinkedList 클래스가 구현되어 있다.
List interface에는 다음과 같은 주요 메서드가 정의되어 있다.
void add(int index, E element) | 객체를 인덱스 위치에 추가한다. |
E get(int index) | 인덱스 위치에 있는 객체를 반환한다. |
int indexOf(Object o) | 명시한 객체가 있는 첫 번째 인덱스를 반환한다. |
E remove(int index) | 인덱스에 있는 객체를 제거한다. |
E set(int index, E element) | 인덱스에 있는 객체와 주어진 객체를 교체한다. |
List<E> subList(int from, int to) | 범위에 해당하는 객체를 리스트로 반환한다. |
static <E> List<E> of(E... elements) | 인자를 불변 리스트로 반환한다. null값을 원소로 가질 수 없으며 원소를 10개 이하로 사용하도록 오버로딩 되어있다. |
public static <T> List<T> asList(T... a) | 인자를 고정 크기의 가변 리스트를 반환하며 Arrays 클래스에 정의되어 있다. |
<T> T[] toArray(T[] a) | 배열과 리스트 간 상호 변환 시 사용하며 List 클래스에 정의되어 있다. |
List
List는 순서가 있는 오브젝트를 중복 여부와 상관없이 저장하는 자료구조이다.
배열과 유사하지만 크기가 가변적이다.
컬렉션 프레임워크의 List를 사용하기 위해서는 java.util.List 패키지를 import 해줘야 한다.
- asList()
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) throws Exception {
String[] name1 = {"Kim", "Lee", "Park"};
List<String> name2 = Arrays.asList(name1);
name2.set(1, "Enchupin");
for (int i = 0; i<name2.size();i++)
System.out.println(name2.get(i));
}
}
위와 같이 배열을 Arrays.asList()를 통해서 List로 변경하여 사용이 가능하다.
그러나 이때 asList()를 통해 반환된 List는 가변 크기가 아니기 때문에 add() 메서드의 사용이 불가능하다.
또한 List에서는 []을 통한 접근이 불가능하기 때문에 get()을 사용하여 데이터에 접근하는 것을 확인할 수 있다.
- toArray()
String[] name3 = name2.toArray(new String[0]);
for (int i = 0; i < name3.length; i++)
System.out.println(name3[i]);
위와 같이 toArray()를 사용하여 고정 크기의 배열 선언이 가능하다.
이때 name3는 List가 아니라 배열이기 때문에 size() 메서드를 사용할 수 없게 된다.
toArray()를 사용할 때 인자로 빈 배열이 아니라 정확한 크기의 배열을 전달해도 되지만 빈 배열을 전달해도 내부적으로 적절한 크기로 할당이 되기 때문에 코드의 간결성을 위해 주로 빈 배열을 전달한다.
- of()
List<String> name4 = List.of("En", "chu", "pin");
for (int i = 0; i < name4.size(); i++)
System.out.println(name4.get(i));
위와 같이 List.of()를 사용하여 불변 List를 선언하는 것이 가능하다.
name4는 불변 List이기 때문에 값을 추가하거나 삭제, 변경하는 것이 불가능하다.
'Java > Java 문법' 카테고리의 다른 글
[Java] 예외 처리 (검사형 예외, 비검사형 예외) (0) | 2024.10.27 |
---|---|
[Java] Iterator 인터페이스 (0) | 2024.10.14 |
[Java] package, import (0) | 2024.10.11 |
[Java] 오브젝트 클래스 (Object Class) (0) | 2024.10.11 |
[Java] final (0) | 2024.10.11 |