Java의 List 개념부터 활용

Yunsung·2025년 1월 4일
post-thumbnail

Java의 List는 자바 컬렉션 프레임워크(Collection Framework)의 대표적인 인터페이스로, 데이터를 순차적으로 저장하고 관리하기 위한 자료구조입니다. 이번 글에서는 List의 개념부터 사용법, 주요 메서드, 그리고 활용 예시까지 차근차근 알아보겠습니다.


✅ Array와 List의 차이점

Java에서 배열(Array)은 고정된 크기와 단일 타입 데이터를 저장하기 위해 사용됩니다. 하지만 배열의 한계를 보완하기 위해 List라는 컬렉션 인터페이스가 등장했습니다.

✨ Array의 특징

  • 고정 길이: 배열은 선언 시 크기가 고정되며, 이후 크기를 변경할 수 없습니다.

  • 단일 타입: 배열에는 같은 데이터 타입만 저장할 수 있습니다.

    Number[] ary = new Number[5]; // 숫자 타입만 저장 가능
     ary[0] = 10;
     ary[2] = null;
     System.out.println("배열 길이: " + ary.length);
     System.out.println(Arrays.toString(ary));

✨ List의 특징

  • 가변 길이: 필요에 따라 크기가 동적으로 변경됩니다.
  • 다양한 데이터 타입: 다양한 객체(Object)를 저장할 수 있습니다.
    - 단, 기본 타입(int, double 등)은 저장할 수 없으며, 래퍼 클래스(Integer, Double 등)를 사용합니다.
    - 제너릭(Generic)을 사용해 저장할 타입을 명시할 수 있습니다.
  • 중복 허용 및 순서 보장: List는 중복된 데이터를 저장할 수 있고, 저장된 순서를 유지합니다.

✅ List와 ArrayList

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());

제너릭(Generic)

제너릭은 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);

✅ List의 주요 메서드

1. 요소 추가: add()

lst.add("Hello");
lst.add(42);

2. 요소 접근: get(index)

System.out.println(lst.get(0)); // 첫 번째 요소 출력

3. 요소 삭제: remove(index) 또는 remove(object)

lst.remove(0);          // 인덱스로 삭제
lst.remove("Hello");    // 특정 값 삭제

4. 크기 확인: size()

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

5. 요소 포함 여부 확인: contains()

System.out.println(lst.contains("Hello") ? "포함됨" : "포함되지 않음");

6. 전체 삭제: clear()

lst.clear();
System.out.println("List 비우기 완료, 크기: " + lst.size());

7. 부분 추출: subList(start, end)

List<String> subList = lst02.subList(1, 3); // 1번~2번 인덱스 추출
System.out.println(subList);

8. 요소 변경: et(index, value)

lst02.set(0, "New Value");
System.out.println(lst02);

✅ List의 활용

1. List 복사(.clone())

List<String> copyLst = (List<String>)((ArrayList<String>)lst02).clone();
System.out.println("Original List: " + lst02);
System.out.println("Copied List: " + copyLst);

2. List 정렬(.sort())

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);

✅ List vs Array: 정리

특징ArrayList
크기고정가변
데이터 타입단일 타입다양한 타입 (Object)
중복 허용가능가능
메서드 제공제한적풍부한 메서드 지원

마무리

List는 Java에서 데이터를 동적으로 관리하기 위한 강력한 도구입니다. 특히 ArrayList는 배열의 단점을 보완하며, 데이터 추가, 삭제, 검색 등 다양한 작업을 유연하게 처리할 수 있습니다. 이번 글이 Java의 List를 이해하는데 도움이 되길 바랍니다.🙌🙌

profile
풀스택 개발자로서의 도전을 하는 중입니다. 많은 응원 부탁드립니다!!😁

0개의 댓글