SeouliteLab

[Java/자바] forEach 사용 방법 본문

프로그래밍

[Java/자바] forEach 사용 방법

Seoulite Lab 2024. 3. 15. 15:41

Java에서는 forEach 메서드를 사용하여 컬렉션 요소를 반복하고 처리할 수 있습니다. 이 글에서는 forEach 메서드의 사용 방법을 자세히 알아보겠습니다.

1. 기본적인 forEach 사용법

먼저, 기본적인 forEach 메서드의 사용법을 살펴보겠습니다. forEach 메서드는 컬렉션 요소를 반복하며 각 요소에 대해 주어진 동작(메서드)을 수행합니다.

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

public class ForEachExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // forEach 메서드를 사용하여 각 과일을 출력합니다.
        fruits.forEach(fruit -> System.out.println(fruit));
    }
}

위 예제에서는 ArrayList를 생성하고, forEach 메서드를 사용하여 리스트의 각 요소를 출력하는 방법을 보여줍니다. 출력 결과는 다음과 같습니다.

Apple Banana Orange

위 코드에서는 fruits 리스트의 각 요소를 출력하기 위해 forEach 메서드를 사용하였습니다. forEach 메서드는 람다식을 인자로 받아 해당 람다식을 리스트의 각 요소에 대해 실행합니다.

2. 병렬 스트림에서의 forEach 사용법

때로는 컬렉션의 요소를 병렬로 처리해야 할 때가 있습니다. Java에서는 병렬 스트림을 사용하여 이를 처리할 수 있습니다. 아래 예제에서는 병렬 스트림을 사용하여 리스트의 요소를 처리하는 방법을 살펴봅니다.

import java.util.Arrays;
import java.util.List;

public class ParallelForEachExample {
    public static void main(String[] args) {
        List<String> colors = Arrays.asList("Red", "Green", "Blue", "Yellow");

        // 병렬 스트림에서 forEach 메서드를 사용하여 각 색상을 출력합니다.
        colors.parallelStream().forEach(color -> System.out.println(color));
    }
}

위 예제에서는 Arrays.asList() 메서드를 사용하여 리스트를 생성하고, parallelStream() 메서드를 호출하여 병렬 스트림을 얻은 후 forEach 메서드를 사용하여 각 요소를 출력합니다.

Green Blue Red Yellow

 

이처럼 병렬 스트림을 사용하면 멀티코어 프로세서를 활용하여 작업을 병렬로 처리할 수 있습니다.

3. forEach 메서드로 요소 변경하기

때로는 컬렉션의 각 요소를 변경하고 싶을 때가 있습니다. 이때 forEach 메서드를 사용하여 요소를 변경할 수 있습니다. 다음 예제에서는 리스트의 각 요소에 대해 소문자로 변환하는 방법을 보여줍니다.

 

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

public class ModifyForEachExample {
    public static void main(String[] args) {
        List<String> colors = new ArrayList<>();
        colors.add("RED");
        colors.add("GREEN");
        colors.add("BLUE");

        // forEach 메서드를 사용하여 각 색상을 소문자로 변환합니다.
        colors.forEach(color -> {
            String lowerCaseColor = color.toLowerCase();
            System.out.println(lowerCaseColor);
        });
    }
}

위 코드에서는 리스트의 각 요소를 소문자로 변환하여 출력하는 방법을 보여 줍니다.

 

red green blue

forEach 메서드를 사용하여 요소를 변경할 때에는 주의해야 합니다. forEach는 요소를 읽기만 할 뿐, 수정할 수 없습니다. 따라서 요소를 변경하려면 ListIterator나 일반 for 루프를 사용해야 합니다.

4. forEach 메서드로 요소 제거하기

forEach 메서드를 사용하여 컬렉션에서 요소를 제거하는 방법을 살펴봅니다. 다음 예제에서는 리스트에서 "Apple"이라는 문자열을 제거하는 방법을 보여줍니다.

 

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

public class RemoveForEachExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // forEach 메서드를 사용하여 "Apple"을 제거합니다.
        fruits.forEach(fruit -> {
            if (fruit.equals("Apple")) {
                fruits.remove(fruit);
            }
        });

        // 변경된 리스트를 출력합니다.
        System.out.println(fruits);
    }
}

위 코드에서는 "Apple"을 제거하기 위해 forEach 메서드를 사용하였습니다. 하지만 이는 예상대로 동작하지 않습니다. forEach 메서드는 컬렉션을 반복하면서 요소를 제거하면서 동시에 컬렉션을 수정할 수 없습니다. 따라서 이 예제는 ConcurrentModificationException이 발생할 것입니다.

5. forEach 메서드로 요소 필터링하기

forEach 메서드를 사용하여 컬렉션에서 요소를 필터링하는 방법을 살펴봅니다. 다음 예제에서는 리스트에서 길이가 5 이상인 문자열만 출력하는 방법을 보여줍니다.

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

public class FilterForEachExample {
    public static void main(String[] args) {
        List<String> words = new ArrayList<>();
        words.add("Apple");
        words.add("Banana");
        words.add("Orange");
        words.add("Grape");
        words.add("Peach");

        // forEach 메서드를 사용하여 길이가 5 이상인 단어만 출력합니다.
        words.forEach(word -> {
            if (word.length() >= 5) {
                System.out.println(word);
            }
        });
    }
}

위 코드에서는 길이가 5 이상인 문자열만 출력하는 방법을 보여줍니다.

Banana Orange Grape Peach

이처럼 forEach 메서드를 사용하여 간단하게 컬렉션의 요소를 필터링할 수 있습니다.

6. 객체 요소에서의 forEach 사용하기

객체 요소를 다룰 때도 forEach 메서드를 사용할 수 있습니다. 다음 예제에서는 사용자 객체를 저장한 리스트에서 사용자의 이름을 출력하는 방법을 보여줍니다.

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

class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public class ObjectForEachExample {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User("Alice"));
        users.add(new User("Bob"));
        users.add(new User("Charlie"));

        // forEach 메서드를 사용하여 각 사용자의 이름을 출력합니다.
        users.forEach(user -> System.out.println(user.getName()));
    }
}

위 예제에서는 사용자 객체를 저장한 리스트에서 forEach 메서드를 사용하여 사용자의 이름을 출력하는 방법을 보여줍니다.

 

Alice Bob Charlie

이처럼 객체 요소에서도 forEach 메서드를 사용하여 간편하게 요소를 처리할 수 있습니다.

결론

이상으로 Java의 forEach 메서드의 사용 방법에 대해 살펴보았습니다. forEach 메서드는 컬렉션의 요소를 반복하고 처리하는데 유용한 기능입니다. 다양한 예제를 통해 forEach 메서드의 활용법을 익혀보시기 바랍니다.