java
List는 자바 컬렉션 프레임워크의 핵심 인터페이스 중 하나로, 순서가 있는 데이터를 다루는 데 매우 유용한 자료구조입니다. List 인터페이스는 요소의 중복을 허용하며, 인덱스를 기반으로 요소에 접근할 수 있는 특징을 가지고 있습니다. ArrayList와 LinkedList는 List 인터페이스를 구현한 대표적인 클래스들이며, 각각의 장단점을 바탕으로 다양한 상황에 맞는 유연한 데이터 처리를 제공합니다. 이 글에서는 List 인터페이스와 그 주요 구현 클래스들에 대해 자세히 설명하고, 어떻게 각 상황에 맞게 효율적으로 활용할 수 있는지 알려드리겠습니다.
List는 자바의 java.util 패키지에 포함된 인터페이스로, 순서를 유지하면서 중복된 요소를 허용하는 자료구조입니다. List 인터페이스는 인덱스를 사용하여 요소를 관리하고, 이를 통해 빠르게 접근하거나 수정할 수 있도록 설계되어 있습니다. 이러한 구조 덕분에 List는 배열과 유사한 기능을 제공하면서도 배열의 크기 한계를 극복하여 더 유연하게 사용할 수 있습니다.
자바에서 List 인터페이스를 구현한 주요 클래스들은 ArrayList, LinkedList, 그리고 Vector 등이 있습니다. 각 클래스는 내부 구조와 특성이 다르기 때문에 상황에 맞는 적절한 선택이 중요합니다.
ArrayList는 동적 배열을 기반으로 구현된 List입니다. 이 클래스는 요소를 추가할 때 내부 배열의 크기가 부족하면 자동으로 배열 크기를 늘리기 때문에 크기 제한 없이 데이터를 추가할 수 있습니다.
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
JavaLinkedList는 이중 연결 리스트를 기반으로 구현된 List입니다. 각 요소는 노드로 구성되며, 이전 및 다음 요소에 대한 참조를 유지합니다.
List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
JavaVector는 ArrayList와 유사하지만, 스레드 안전하게 동작하도록 설계되었습니다. Vector의 모든 메서드는 동기화되어 있어 멀티스레드 환경에서 안전하게 사용할 수 있습니다. 하지만 이로 인해 성능이 저하될 수 있습니다.
List<String> list = new Vector<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
JavaList 인터페이스는 요소를 관리하기 위한 다양한 메서드를 제공합니다. 다음은 자주 사용되는 주요 메서드들입니다.
요소를 리스트의 끝에 추가합니다.
list.add("Orange"); // 리스트의 끝에 "Orange" 추가
Java특정 인덱스에 요소를 추가합니다. 기존 요소들은 한 칸씩 뒤로 이동합니다.
list.add(1, "Grapes"); // 인덱스 1에 "Grapes" 추가
Java특정 인덱스의 요소를 가져옵니다.
String fruit = list.get(2); // 인덱스 2의 요소 가져오기
Java특정 인덱스의 요소를 수정합니다.
list.set(2, "Peach"); // 인덱스 2의 요소를 "Peach"로 변경
Java특정 인덱스의 요소 또는 특정 값을 가진 첫 번째 요소를 제거합니다.
list.remove(1); // 인덱스 1의 요소 제거
list.remove("Apple"); // "Apple"이라는 값을 가진 첫 번째 요소 제거
Java리스트에 포함된 요소의 수를 반환합니다.
int size = list.size(); // 리스트 크기 반환
Java리스트의 모든 요소를 제거합니다.
list.clear(); // 모든 요소 제거
Java다음은 List를 사용하여 학생들의 이름을 관리하는 간단한 예제입니다.
import java.util.List;
import java.util.ArrayList;
public class StudentList {
public static void main(String[] args) {
List<String> students = new ArrayList<>();
students.add("Minsu");
students.add("Jihyun");
students.add("Soyeon");
// 학생 목록 출력
for (String student : students) {
System.out.println(student);
}
// 학생 추가 및 제거
students.add(1, "Hyejin");
students.remove("Jihyun");
// 업데이트된 학생 목록 출력
System.out.println("\n업데이트된 학생 목록:");
for (String student : students) {
System.out.println(student);
}
}
}
Java위 코드에서 List는 학생들의 이름을 동적으로 관리하는 데 사용되며, ArrayList를 구현체로 선택하여 요소를 추가하고 제거하는 작업이 간단하게 이루어집니다.
List는 자바 컬렉션 프레임워크에서 순서가 있는 데이터를 관리할 때 매우 유용한 인터페이스입니다. ArrayList, LinkedList, Vector와 같은 다양한 구현 클래스를 통해 각기 다른 상황에서 효율적으로 데이터를 관리할 수 있습니다. 데이터의 읽기, 삽입, 삭제 패턴에 따라 적절한 구현체를 선택하는 것이 중요하며, 이를 통해 프로그램의 성능을 극대화할 수 있습니다.
이 글을 통해 List 인터페이스와 주요 구현 클래스들의 차이점과 사용 방법을 이해하고, 다양한 상황에서 List를 효과적으로 활용할 수 있기를 바랍니다.
Readable Code: 읽기 좋은 코드를 작성하는 사고법Practical Testing: 실용적인 테스트 가이드 강의와 함께한 인프런 워밍업 클럽…
Readable Code: 읽기 좋은 코드를 작성하는 사고법Practical Testing: 실용적인 테스트 가이드 강의와 함께한 인프런 워밍업 클럽…
테스트 시 의존성 주입(Dependency Injection)과 Mockito Spring 애플리케이션을 개발하다 보면, 테스트 코드에서 실제 빈(Bean)을 사용하지…
들어가며 스프링 기반 프로젝트에서 좋은 설계 구조와 테스트 전략은 소프트웨어 품질과 유지보수성에 직결됩니다. 최근 학습한…
Readable Code: 읽기 좋은 코드를 작성하는 사고법Practical Testing: 실용적인 테스트 가이드 강의와 함께한 인프런 워밍업 클럽…
Readable Code: 읽기 좋은 코드를 작성하는 사고법Practical Testing: 실용적인 테스트 가이드 강의와 함께한 인프런 워밍업 클럽…