Dev Story/Java

Java Stream API

yurapapa 2024. 2. 24. 19:01
반응형

 자바의 Stream API는 컬렉션을 다루는 데 강력한 기능을 제공하여 코드를 더 간결하고 효율적으로 만들어줍니다.

특히, for문을 대체하고 객체를 추출하고 변경하는 작업을 할 때 매우 유용합니다.

이 글에서는 Stream API의 다양한 기능을 예시와 함께 살펴보며 이러한 작업을 어떻게 수행하는지 알아보겠습니다.

1. for문 대체

 for문은 반복적인 작업을 수행할 때 많이 사용되지만, Stream API를 사용하면 더 간결하고 가독성이 높은 코드를 작성할 수 있습니다.

예를 들어, 다음과 같은 리스트가 있다고 가정해 봅시다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

 

이 리스트에서 각 요소를 출력하는 간단한 for문은 다음과 같습니다.

for (int number : numbers) { 
	System.out.println(number); 
}

 

하지만 Stream API를 사용하면 이를 더 간결하게 표현할 수 있습니다.

numbers.stream().forEach(System.out::println);

 

Stream의 forEach 메서드를 사용하여 요소를 출력할 수 있습니다.

이렇게 하면 코드가 더 간결해지고 가독성이 향상됩니다.

2. 객체 추출 및 변경

Stream API를 사용하면 컬렉션에서 객체를 추출하고 필요에 따라 변경할 수 있습니다.

예를 들어, 다음과 같은 리스트가 있다고 가정해 봅시다.

List<String> names = Arrays.asList("John", "Alice", "Bob", "David");

 

이 리스트에서 각 이름의 길이를 구하고 새로운 리스트에 저장하려면 for문을 사용할 수 있습니다.

List<Integer> nameLengths = new ArrayList<>(); 
for (String name : names) { 
	nameLengths.add(name.length()); 
}

 

하지만 Stream API를 사용하면 이를 한 줄로 간단하게 처리할 수 있습니다.

List<Integer> nameLengths = names.stream()
	.map(String::length)
    	.collect(Collectors.toList());

 

여기서 map 메서드는 각 요소를 지정된 함수에 매핑하고, collect 메서드는 그 결과를 리스트로 수집합니다.

이렇게 하면 코드가 더 간결하고 선언적이며, 객체를 추출하고 변경하는 과정이 명확하게 드러납니다.

3. 복잡한 작업의 간결한 처리

 Stream API를 사용하면 복잡한 작업도 간결하게 처리할 수 있습니다.

예를 들어, 다음과 같은 리스트가 있다고 가정해 봅시다.

List<Integer> nameLengths = names.stream()
	.map(String::length)
    	.collect(Collectors.toList());

 

이 리스트에서 짝수만 필터링하고 각 값을 제곱한 후 모두 더하려면 다음과 같이 할 수 있습니다.

int sumOfSquaredEvenNumbers = numbers.stream()
	.filter(n -> n % 2 == 0)
    	.map(n -> n * n)
        .reduce(0, Integer::sum);

 

 여기서 filter 메서드는 조건에 맞는 요소만 필터링하고, map 메서드는 각 요소를 제곱으로 변환하고,

reduce 메서드는 모든 값을 합산합니다.

이렇게 하면 단 몇 줄의 코드로도 복잡한 작업을 처리할 수 있습니다.

 

 이처럼 Stream API는 for문을 대체하고 객체를 추출하고 변경하는 작업을 효율적으로 처리할 수 있는 강력한 도구입니다.

이를 적절히 활용하면 코드의 가독성을 높이고 유지보수성을 향상할 수 있습니다.

반응형