Java의 List는 자바 컬렉션 프레임워크(Collection Framework)의 대표적인 인터페이스로, 데이터를 순차적으로 저장하고 관리하기 위한 자료구조입니다. 이번 글에서는 List의 개념부터 사용법, 주요 메서드, 그리고 활용 예시까지 차근차근 알아보겠습니다.
Java에서 배열(Array)은 고정된 크기와 단일 타입 데이터를 저장하기 위해 사용됩니다. 하지만 배열의 한계를 보완하기 위해 List라는 컬렉션 인터페이스가 등장했습니다.
고정 길이: 배열은 선언 시 크기가 고정되며, 이후 크기를 변경할 수 없습니다.
단일 타입: 배열에는 같은 데이터 타입만 저장할 수 있습니다.
Number[] ary = new Number[5]; // 숫자 타입만 저장 가능
ary[0] = 10;
ary[2] = null;
System.out.println("배열 길이: " + ary.length);
System.out.println(Arrays.toString(ary));
int, double 등)은 저장할 수 없으며, 래퍼 클래스(Integer, Double 등)를 사용합니다.ArrayList는 List 인터페이스의 가장 대표적인 구현체로, 배열의 기능을 확장하여 더욱 유연한 데이터 관리가 가능합니다.
import java.util.ArrayList;
import java.util.List;
List lst = new ArrayList(); // 다양한 데이터 타입의 객체 저장 가능
lst.add(10); // Integer 타입
lst.add("Hello"); // String 타입
lst.add(true); // Boolean 타입
// 출력
for (Object obj : lst) {
System.out.println(obj); // 모든 타입의 데이터를 Object로 처리
}
// 크기 확인
System.out.println("List 크기: " + lst.size());
// 요소 제거
lst.remove(true);
System.out.println("요소 제거 후 크기: " + lst.size());
제너릭은 List에 저장할 데이터 타입을 명시적으로 지정하는 문법입니다. 이를 통해 컴파일 시 타입 안정성을 확보하고, 런타임에서의 캐스팅 문제를 줄일 수 있습니다.
List<String> lst02 = new ArrayList<>(); // String만 저장 가능
lst02.add("A");
lst02.add("B");
lst02.add("C");
// 요소 접근
for (int i = 0; i < lst02.size(); i++) {
System.out.println(lst02.get(i));
}
// 요소 삭제
lst02.remove(0);
add()lst.add("Hello");
lst.add(42);
get(index)System.out.println(lst.get(0)); // 첫 번째 요소 출력
remove(index) 또는 remove(object)lst.remove(0); // 인덱스로 삭제
lst.remove("Hello"); // 특정 값 삭제
size()System.out.println("List 크기: " + lst.size());
contains()System.out.println(lst.contains("Hello") ? "포함됨" : "포함되지 않음");
clear()lst.clear();
System.out.println("List 비우기 완료, 크기: " + lst.size());
subList(start, end)List<String> subList = lst02.subList(1, 3); // 1번~2번 인덱스 추출
System.out.println(subList);
et(index, value)lst02.set(0, "New Value");
System.out.println(lst02);
List<String> copyLst = (List<String>)((ArrayList<String>)lst02).clone();
System.out.println("Original List: " + lst02);
System.out.println("Copied List: " + copyLst);
List<Integer> sortLst = new ArrayList<>();
sortLst.add(3);
sortLst.add(1);
sortLst.add(2);
// 오름차순 정렬
sortLst.sort(Comparator.naturalOrder());
System.out.println("오름차순: " + sortLst);
// 내림차순 정렬
sortLst.sort(Comparator.reverseOrder());
System.out.println("내림차순: " + sortLst);
| 특징 | Array | List |
|---|---|---|
| 크기 | 고정 | 가변 |
| 데이터 타입 | 단일 타입 | 다양한 타입 (Object) |
| 중복 허용 | 가능 | 가능 |
| 메서드 제공 | 제한적 | 풍부한 메서드 지원 |
List는 Java에서 데이터를 동적으로 관리하기 위한 강력한 도구입니다. 특히 ArrayList는 배열의 단점을 보완하며, 데이터 추가, 삭제, 검색 등 다양한 작업을 유연하게 처리할 수 있습니다. 이번 글이 Java의 List를 이해하는데 도움이 되길 바랍니다.🙌🙌