본문 바로가기
Java/java

자바 List의 기본 사용법과 활용 예제 알아보기

by 노마드 산코디 2023. 9. 28.
728x90

안녕하세요. 오늘은 자바 List에 대한 내용을 주제로, 자바 프로그래밍에서 데이터를 관리하고 다룰 때 핵심 역할을 하는 List에 대해 다루어보려고 합니다. List의 기본 사용법부터 다양한 활용 예제까지 살펴보며, 어떻게 효과적으로 활용할 수 있는지 알아보겠습니다.

 

 

 


1. List의 개념과 특징

List는 자바 프로그래밍 언어에서 제공하는 컬렉션(데이터 구조) 중 하나로, 여러 요소를 순서대로 저장하고 관리할 수 있는 자료구조입니다. List는 배열과 유사한 특징을 가지고 있지만, 크기가 동적으로 조절되며 다양한 기능과 메서드를 제공해 데이터를 보다 효과적으로 다룰 수 있습니다.

특징 

  • 순서가 있는 데이터 구조
    List
    는 요소(element)들의 순서가 유지되며, 각 요소는 인덱스를 사용하여 접근할 수 있습니다. 이 순서는 요소가 추가된 순서를 의미합니다.


  • 중복 허용
    List
    는 동일한 요소의 중복을 허용합니다. 즉, 하나의 요소를 여러 번 포함할 수 있습니다.


  • 크기의 동적 조절
    List
    의 크기는 동적으로 조절됩니다. 요소를 추가하거나 삭제할 때 List의 크기가 자동으로 조절됩니다.


  • 제네릭(Generic) 지원
    자바에서는 제네릭을 사용하여 List에 저장되는 요소의 데이터 유형을 제한할 수 있습니다. 이를 통해 타입 안정성을 확보하고 형 변환을 줄일 수 있습니다.


  • 다양한 구현체
    자바에서 List 인터페이스를 구현하는 다양한 클래스가 제공됩니다. 대표적으로 ArrayList, LinkedList, Vector 등이 있으며, 각 클래스는 특정 상황에서 더 효율적으로 사용될 수 있습니다.



List를 사용하면 데이터를 쉽게 추가, 삭제, 검색 및 정렬할 수 있으며, 다양한 데이터 처리 작업에 유용합니다. 이러한 특징을 토대로 프로그램에서 데이터 관리와 처리를 보다 효율적으로 수행할 수 있습니다.








2. List의 생성과 초기화



1. ArrayList 생성 및 초기화

// 빈 ArrayList 생성
ArrayList<String> arrayList = new ArrayList<>();

// 초기 요소를 포함한 ArrayList 생성
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));


ArrayList는 일반적으로 가장 많이 사용되는 List 구현체 중 하나입니다. 빈 ArrayList를 생성하거나 초기 요소를 포함한 ArrayList를 생성할 수 있습니다.



2. LinkedList 생성 및 초기화

// 빈 LinkedList 생성
LinkedList<String> linkedList = new LinkedList<>();

// 초기 요소를 포함한 LinkedList 생성
LinkedList<Integer> numbers = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));


LinkedList는 요소를 추가하고 삭제하는 작업에 더 효율적일 수 있으며, 특정 상황에서 사용됩니다.




3. Vector 생성 및 초기화

// 빈 Vector 생성
Vector<String> vector = new Vector<>();

// 초기 요소를 포함한 Vector 생성
Vector<Integer> numbers = new Vector<>(Arrays.asList(1, 2, 3, 4, 5));


Vector는 스레드로부터 안전한 List 구현체이며, 빈도가 낮지만 필요한 경우에 사용될 수 있습니다.




4. 배열을 List로 변환

String[] colorsArray = { "Red", "Green", "Blue" };
List<String> colorsList = Arrays.asList(colorsArray);


배열을 List로 변환하려면 Arrays.asList() 메서드를 사용할 수 있습니다.




5. Collections.nCopies로 요소 복제

List<String> copies = Collections.nCopies(5, "Default");


Collections.nCopies() 메서드를 사용하면 동일한 요소를 복제한 List를 생성할 수 있습니다.








3. List의 검색과 필터링



1. for-each 루프를 사용한 검색
List를 반복하여 원하는 요소를 검색할 수 있습니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
String target = "Bob";
for (String name : names) {
    if (name.equals(target)) {
        // 검색한 요소를 처리
        System.out.println("찾은 요소: " + name);
        break; // 중복 검색 방지를 위해 break
    }
}




2. Stream API를 사용한 필터링
Java 8 이상에서는 Stream API를 사용하여 List를 필터링하고 검색할 수 있습니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
String target = "Bob";
Optional<String> result = names.stream()
    .filter(name -> name.equals(target))
    .findFirst();

if (result.isPresent()) {
    System.out.println("찾은 요소: " + result.get());
}


filter 메서드를 사용하여 원하는 조건을 만족하는 요소를 필터링하고, findFirst 메서드로 첫 번째 일치하는 요소를 검색합니다.



3. Lambda 표현식을 사용한 검색
람다 표현식을 사용하여 List를 검색할 수 있습니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
String target = "Bob";
String result = names.stream()
    .filter(name -> name.equals(target))
    .findFirst()
    .orElse(null);

if (result != null) {
    System.out.println("찾은 요소: " + result);
}




4. 인덱스를 사용한 검색
List의 인덱스를 이용하여 검색할 수 있습니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
String target = "Bob";
int index = names.indexOf(target);

if (index != -1) {
    String result = names.get(index);
    System.out.println("찾은 요소: " + result);
}


indexOf 메서드로 요소의 인덱스를 찾고, get 메서드로 해당 요소를 얻을 수 있습니다.



5. Java 8 이전 버전에서의 검색
Java 8 이전 버전에서는 for 루프를 사용하여 검색할 수 있습니다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
String target = "Bob";
String result = null;

for (String name : names) {
    if (name.equals(target)) {
        result = name;
        break;
    }
}

if (result != null) {
    System.out.println("찾은 요소: " + result);
}




적절한 검색 및 필터링 방법은 프로젝트 요구 사항 및 Java 버전에 따라 다를 수 있습니다. Java 8 이상을 사용하는 경우 Stream API를 사용하는 것이 편리하고 강력한 방법 중 하나입니다.








4. List의 활용 예제



1. 리스트에 요소 추가 및 순회

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

public class ListExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();

        // 요소 추가
        fruits.add("사과");
        fruits.add("바나나");
        fruits.add("딸기");

        // 리스트 순회
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}


위의 소스 코드는 자바에서 List를 활용하여 문자열 요소를 저장하고 순회하는 간단한 예제입니다. 코드에서는 문자열을 저장하기 위한 List<String> 형식의 fruits 리스트를 생성합니다.


그 다음, fruits.add("사과");, fruits.add("바나나");, fruits.add("딸기");와 같이 fruits 리스트에 문자열 요소들을 추가합니다.

마지막으로, for-each 루프를 사용하여 fruits 리스트를 순회하면서 각 요소를 출력합니다. 결과적으로 "사과", "바나나", "딸기"가 순서대로 화면에 출력됩니다.

이 코드는 자바에서 리스트를 생성하고 데이터를 추가하며, 리스트의 요소를 순회하는 기본적인 예제를 보여줍니다.



2. 리스트에서 요소 검색

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

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

        // 요소 검색
        String target = "바나나";
        if (fruits.contains(target)) {
            System.out.println(target + "을(를) 찾았습니다.");
        } else {
            System.out.println(target + "을(를) 찾지 못했습니다.");
        }
    }
}


위의 코드는 리스트에서 요소를 검색하는 방법과 검색 결과에 따라 메시지를 출력하는 간단한 예제입니다.


먼저 ArrayList를 사용하여 fruits라는 과일 목록을 생성합니다. 그리고 fruits.add("사과");, fruits.add("바나나");, fruits.add("딸기");와 같이 몇 가지 과일을 목록에 추가합니다.

그 다음, String target = "바나나";라는 변수를 사용하여 찾고자 하는 과일을 설정합니다. 코드는 fruits.contains(target)를 통해 target 변수에 저장된 과일을 fruits 목록에서 검색합니다. 만약 과일 목록에 해당 과일이 포함되어 있다면, "바나나을(를) 찾았습니다."라는 메시지를 출력하고, 그렇지 않으면 "바나나을(를) 찾지 못했습니다."라는 메시지를 출력합니다.



3. 리스트에서 요소 제거

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

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

        // 요소 제거
        String target = "바나나";
        if (fruits.contains(target)) {
            fruits.remove(target);
            System.out.println(target + "을(를) 제거했습니다.");
        } else {
            System.out.println(target + "을(를) 찾지 못했습니다.");
        }
    }
}


위의 소스 코드는 ArrayList를 활용하여 과일 목록을 생성하고, 특정 과일(여기서는 "바나나")을 찾아서 찾았을 경우 해당 과일을 목록에서 제거하고 "바나나을(를) 제거했습니다." 메시지를 출력합니다. 만약 찾는 과일이 목록에 없으면 "바나나을(를) 찾지 못했습니다." 메시지를 출력하는 예제입니다.



4. 리스트 크기 확인

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

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

        // 리스트 크기 확인
        int size = fruits.size();
        System.out.println("리스트 크기: " + size);
    }
}


위의 소스 코드는 ArrayList를 활용하여 과일 목록을 생성하고, 리스트의 크기를 확인한 후 "리스트 크기: [크기]" 형식으로 출력하는 예제입니다. 여기서는 "사과," "바나나," "딸기" 세 가지 과일이 목록에 있으므로 리스트 크기는 3이며, 이 값이 화면에 출력됩니다.




5. 리스트를 배열로 변환

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

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

        // 리스트를 배열로 변환
        String[] fruitArray = fruits.toArray(new String[fruits.size()]);
        for (String fruit : fruitArray) {
            System.out.println(fruit);
        }
    }
}


위의 소스 코드는 ArrayList에 저장된 과일 목록을 배열로 변환하고, 그 배열을 반복문을 통해 순회하여 각 과일을 출력하는 예제입니다. ArrayList에 저장된 "사과," "바나나," "딸기" 세 가지 과일을 배열로 변환하여 순차적으로 출력하고 있습니다.



이러한 예제는 List의 기본적인 활용 방법을 보여줍니다. List를 사용하면 데이터를 효율적으로 관리하고 다양한 작업을 수행할 수 있습니다.

 

 

 


최종 정리

오늘은 자바 List에 대한 기본적인 내용을 주제로 정리해 보았습니다. List는 데이터를 순서대로 저장하고 관리하는 자료구조로, 자바 프로그래밍에서 매우 중요한 역할을 합니다. List를 생성하고 초기화하며, 요소를 추가, 검색, 제거하는 방법을 살펴보았습니다. 또한 List를 배열로 변환하고, 리스트의 크기를 확인하는 방법도 다루었습니다. 

다음에는 더 다양한 List 관련 내용을 살펴보겠습니다.

감사합니다.






728x90
반응형