본문 바로가기

JAVA

[Java] List 자료 구조와 List 인터페이스란?

List 자료구조

순서가 있는 데이터 집합을 표현하는 자료구조이다.

  • 데이터 추가된 순으로 나열된다.
  • 중복을 허용한다.
  • 각 요소는 인덱스를 통해 순서대로 접근 가능하다.
  • 데이터의 삽입, 삭제, 검색 등이 가능하다.

 


 

List 인터페이스

순서가 있는 요소들의 컬렉션(Collection)을 정의하며, 중복된 요소를 허용한다.

import java.util.List;

자바 util 패키지에 포함되어 있다.

 

 

1. 객체 생성

List<String> list = new List<>(); // ❌ 불가능

List<String> list = new ArrayList<>(); // ✅ 가능
List<String> list = new LinkedList<>(); // ✅ 가능
List<String> list = new Stack<>(); // ✅ 가능
  • Java에서 제공하는 List 인터페이스(List<k>)는 객체를 직접 생성 ❌.
    (추가 정보 확인 : https://kimyongjun0129.tistory.com/98)
  • 따라서 ArrayList, LinkedList, Vector, Stack 등의 구현체(클래스)를 사용해야 한다.
  • 제네릭으로 자료형이 통일되기 때문에 같은 자료형만 넣을 수 있다. (객체만 가능하다. int ❌, Integer  ✅)
  • 위 코드에서 처럼 작성하는 이유 :
    1. 코드의 유연성 증가 : 필요에 따라 다른 구현체로 쉽게 교체할 수 있다.
    2. 다형성(Polymorphism) 활용 : 구현체에 의지 ❌, 하나의 인터페이스로 여러 가지 구현체를 사용할 수 있다.

 

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Stack;

다른 구현체(클래스)를 사용할 때는 import를 시켜줘야 한다.

 

 

 

2. 주요 구현체

클래스 내부 구조 주요 특징 동기화 여부
ArrayList 동적 배열 빠른 검색, 느린 삽입/삭제
LinkedList 이중 연결 리스트 빠른 삽입/삭제, 느린 검색
Vector 동적 배열 ArrayList + 동기화
Stack 동적 배열 Vector 기반의 스택 구현 (LIFO)

 

 

 

3. 주요 공통 메서드들

메서드 설명
add(E  e) 요소 추가
add(int index, E element) 특정 위치에 요소 추가
get(int index) 특정 인덱스의 요소 가져오기
set(int index, E element) 특정 인덱스의 요소 변경
remove(int index) 특정 인덱스의 요소 제거
remove(Object o) 특정 객체 제거
size() 리스트 크기 반환
isEmpty() 비어 있는지 확인
contains(Object o) 특정 요소가 포함되어 있는지 확인
indexOf(Object o) 처음 나타나는 인덱스 반환
clear() 리스트 비우기
subList(int from, int to) 부분 리스트 반환

List의 주요 메서드는 List 인터페이스에 정의된 것들이라 모든 List 구현체( ArrayList , LinkedList , Vector, Stack  등)에서 사용 가능 ✅

 

만약, 공통된 메서드들이 아닌 각 구현체(클래스)의 기능을 사용하고 싶다면

 ArrayList<String> list = new ArrayList<>();

다음과 같이 인터페이스가 아닌 클래스를 이용하여 변수를 선언하고 할당하면 된다.

 

 

 

4. 사용 예제

더보기
import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        
        list.add("사과");
        list.add("바나나");
        list.add("체리");

        System.out.println(list.get(1)); // 바나나

        list.set(1, "블루베리");
        System.out.println(list); // [사과, 블루베리, 체리]

        list.remove("사과");
        System.out.println(list); // [블루베리, 체리]

        System.out.println("리스트 크기: " + list.size()); // 2
    }
}