개발/JAVA

Java 컬렉션: List 인터페이스와 ArrayList 활용법

예니03 2025. 1. 8. 11:23
반응형

Java에서 List는 순서를 유지하며 데이터를 저장할 수 있는 인터페이스로, 컬렉션 프레임워크의 중요한 구성 요소입니다. 특히 ArrayList는 List를 구현한 대표적인 클래스입니다. 이번 글에서는 List와 ArrayList의 기본 개념, 주요 기능, 그리고 사용법을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다. 😊

1. List 인터페이스란?

List는 Java의 컬렉션 프레임워크에서 순서를 유지하며 데이터를 저장할 수 있는 인터페이스입니다.

List의 특징

  1. 순서 유지: 데이터가 삽입된 순서를 유지합니다.
  2. 중복 허용: 동일한 데이터(객체)를 여러 번 저장할 수 있습니다.
  3. 다양한 구현체 제공: ArrayList, LinkedList 등이 List 인터페이스를 구현한 대표적인 클래스입니다.

 

2. ArrayList: List 인터페이스의 구현 클래스

ArrayList는 List를 구현한 가장 대표적인 클래스입니다.

ArrayList 특징

  • 배열 기반: 내부적으로 동적 배열을 사용하여 데이터를 저장.
  • 빠른 검색: 인덱스를 기반으로 데이터를 검색할 때 속도가 빠릅니다.
  • 유연한 크기 조정: 배열 크기를 자동으로 조정합니다.

 

3. 코드로 배우는 ArrayList 사용법

3-1. ArrayList 기본 사용법

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

public class ListEx {
    public static void main(String[] args) {
        // List 선언 및 ArrayList 구현체 생성
        List<String> lst = new ArrayList<>();

        // 1. 데이터 추가
        lst.add("Java");
        lst.add("C");
        lst.add("C++");
        lst.add("Python");

        System.out.println("List: " + lst);  // 출력: [Java, C, C++, Python]

        // 2. 특정 위치에 데이터 삽입
        lst.add(2, "C#");
        System.out.println("삽입 후 List: " + lst);  // 출력: [Java, C, C#, C++, Python]

        // 3. 중복 데이터 허용
        lst.add("Java");
        System.out.println("중복 추가 후 List: " + lst);  // 출력: [Java, C, C#, C++, Python, Java]

        // 4. 데이터 삭제
        lst.remove(2);  // 인덱스 2 데이터 삭제
        lst.remove("Python");  // "Python" 값 삭제
        System.out.println("삭제 후 List: " + lst);  // 출력: [Java, C, C++, Java]

        // 5. 전체 데이터 비우기
        lst.clear();
        System.out.println("비운 후 List: " + lst);  // 출력: []
    }
}

출력 결과

List: [Java, C, C++, Python]  
삽입 후 List: [Java, C, C#, C++, Python]  
중복 추가 후 List: [Java, C, C#, C++, Python, Java]  
삭제 후 List: [Java, C, C++, Java]  
비운 후 List: []

 

3-2. ArrayList 순회 (Iterator 사용)

ArrayList를 순회하며 데이터를 확인하려면 Iterator를 사용할 수 있습니다.

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

public class ListEx2 {
    public static void main(String[] args) {
        List<String> lst = new ArrayList<>();
        lst.add("Java");
        lst.add("C");
        lst.add("C++");
        lst.add("Python");

        System.out.println("List: " + lst);

        // Iterator 사용
        System.out.println("===== Iterator로 데이터 순회 =====");
        Iterator<String> it = lst.iterator();  // Iterator 생성
        while (it.hasNext()) {  // 다음 데이터가 있으면 true 반환
            String item = it.next();
            System.out.print(item + " ");  // 각 데이터를 출력
        }
        System.out.println();
    }
}

출력 결과

List: [Java, C, C++, Python]  
===== Iterator로 데이터 순회 =====  
Java C C++ Python  

 

 

4. List와 ArrayList의 주요 메서드 정리

메서드 설명 예제
add(E e) 데이터를 추가 lst.add("Java")
add(int index, E e) 특정 위치에 데이터를 삽입 lst.add(2, "C#")
remove(Object o) 특정 값을 삭제 lst.remove("Python")
remove(int index) 특정 인덱스의 데이터를 삭제 lst.remove(2)
get(int index) 특정 인덱스의 데이터를 가져옴 lst.get(1)
size() 리스트의 크기 반환 lst.size()
clear() 리스트의 모든 데이터를 삭제 lst.clear()
contains(Object o) 특정 값이 리스트에 포함되었는지 확인 lst.contains("Java")

 

5. ArrayList와 LinkedList의 차이점

특징 ArrayList LinkedList
내부 구조 동적 배열 기반 이중 연결 리스트 기반
검색 속도 빠름 (인덱스를 이용) 느림 (순차 탐색)
삽입/삭제 속도 느림 (데이터 이동 필요) 빠름 (포인터 조정)
메모리 사용량 상대적으로 적음 상대적으로 많음

 

6. 정리

  • List는 순서를 유지하며 중복 데이터를 허용하는 Java 컬렉션 인터페이스입니다.
  • ArrayList는 List를 구현한 클래스 중 하나로, 배열 기반으로 동작하며 검색 속도가 빠릅니다.
  • 주요 메서드(add, remove, clear)와 순회 방식(Iterator 사용)을 익히면 데이터를 효과적으로 관리할 수 있습니다.
반응형