에스제이

반응형

 

LIST는 Java의 Collection Framework에 포함된 인터페이스로, 순서가 있는 데이터 집합을 다루는 데 사용됩니다. List는 중복 요소를 허용하며, 요소가 추가된 순서를 유지합니다. 이는 ArrayList, LinkedList, Vector 등의 구체적 구현 클래스에 의해 실질적으로 동작합니다.

 

1. List의 주요 특징

순서 보장: 요소들이 추가된 순서대로 유지됩니다.

중복 허용: 동일한 요소를 여러 번 추가할 수 있습니다.

인덱스를 통한 접근: 배열처럼 0 기반 인덱스를 사용하여 요소에 접근 가능합니다.

유연한 크기: 배열과 달리 크기가 동적으로 조정됩니다.

 

2. List 인터페이스의 주요 메서드

메서드 설명 예제 코드
add(E element) 리스트의 끝에 요소를 추가. list.add("Java");
add(int index, E element) 특정 위치에 요소를 삽입. list.add(1, "Spring");
get(int index) 지정한 인덱스에 있는 요소를 반환. String value = list.get(0);
set(int index, E element) 지정한 위치의 요소를 새 값으로 대체. list.set(0, "Updated");
remove(int index) 지정한 인덱스의 요소를 제거. list.remove(1);
size() 리스트에 있는 요소의 개수를 반환. int size = list.size();
contains(Object o) 특정 요소가 리스트에 있는지 확인. boolean hasItem = list.contains("Java");
clear() 리스트의 모든 요소를 제거. list.clear();
isEmpty() 리스트가 비어 있는지 확인. boolean empty = list.isEmpty();
toArray() 리스트를 배열로 변환. String[] array = list.toArray(new String[0]);

 

3. List의 구현 클래스

클래스 특징 적용 사례
ArrayList - 내부적으로 배열로 구현 데이터 읽기가 많고 삽입/삭제가 적은 경우
- 빠른 읽기(get), 느린 삽입/삭제(add/remove)
LinkedList - 이중 연결 리스트로 구현 큐(Queue) 또는 스택(Stack)처럼 활용할 때
- 삽입/삭제가 빠름, 읽기 속도는 느림
Vector - ArrayList와 유사하지만 동기화 지원 멀티스레드 환경에서 안전한 리스트가 필요할 때
- 멀티스레드 환경에서 사용 가능
CopyOnWriteArrayList - 쓰기 작업 시 배열 복사 동시 읽기 작업이 빈번하며 쓰기 작업이 적을 때
- 동기화 지원
- 읽기 위주 작업에서는 안전하고 성능이 좋음

 

4. ArrayList와 LinkedList 비교

특성 ArrayList LinkedList
내부 구조 동적 배열 이중 연결 리스트
삽입/삭제 속도 요소 중간 삽입/삭제 느림 요소 중간 삽입/삭제 빠름
읽기 속도 빠름 느림
메모리 효율성 요소 외 메모리 오버헤드 적음 각 노드에 추가적인 메모리 필요
적합한 경우 읽기 작업이 많을 때 삽입/삭제 작업이 많을 때

 

5. 사용 예제

5.1 ArrayList

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Java");
        list.add("Spring");
        list.add("Hibernate");

        // 읽기
        System.out.println("첫 번째 요소: " + list.get(0));

        // 수정
        list.set(1, "Spring Boot");

        // 삭제
        list.remove(2);

        // 전체 출력
        for (String item : list) {
            System.out.println(item);
        }
    }
}

 

5.2 LinkedList

import java.util.LinkedList;

public class Main {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(10);
        list.addFirst(5);
        list.addLast(15);

        // 중간 삽입
        list.add(1, 8);

        // 삭제
        list.removeFirst();

        System.out.println("리스트 내용: " + list);
    }
}

 

6. 정리

Java의 List는 다양한 개발 시나리오에서 강력한 도구로 활용될 수 있습니다. 특히, 적절한 구현 클래스를 선택하고 Java의 최신 기능과 결합한다면 더 높은 생산성을 얻을 수 있습니다. 이 글이 List에 대한 이해를 돕고, 개발에 실질적으로 도움을 주는 자료로 활용되기를 바랍니다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band