개발관련 책

Java Stream map,foreach 차이 및 예제

MIN우 2024. 5. 4. 08:16
728x90

목차

· 왜 map과 foreach의 차이점에 대해 알아보게되었을까?

· map과 foreach 무슨차이가 있을까?

· 결론

 

왜 map과 foreach의 차이점에 대해 알아보게 되었을까?

 

4월부터 시작한 인턴생활, 파일럿프로젝트에서 매일 저녁 8시마다 파이어베이스 알림을 보내주는 스케줄러를 구현했고 테스트 서버에 올려두었다. 하지만 8시가 지나도 알림이 발생하지않았다. 뭐지뭐지.. 어리둥절하다가 결국 스케줄러 내부 메소드를 뜯어보게 되었고 map이 문제였었다.

 

map과 foreach는 무슨차이가 있을까?

 

작동을 하지 않았던 코드

List<Plant> plantList = plantRepository.findAll();
        plantList.stream().map(plant -> {
            if(plant.isActive()){
                notifyEveryDay(plant);
            }
            return plant;
        });
    }

 

Map과 Foreach의 용도는 명확히 다르다.

Stream의 Map의 경우 최종연산을 해서 반환 값이 필요한 경우 써야한다. 최종연산이 존재하고

최종연산을 거치지 않으면 결과물이 도출이 되지않기 때문에 내부적인 notifyEveryDay메소드도

작동이 안했던 것이다. 결국에는 최종연산을 적어주어 Stream안에 있는 map의 메소드가 작동하도록 설계를 해야하지만

해당 로직에서는반환값이 필요하지않았기 떄문에 Map은 적절치 못하다고 판단했다.

 

작동 코드

plantRepository.findAll();
        plantList.forEach(plant -> {
            if(plant.isActive()){
                notifyEveryDay(plant);
            }
        });
    }

위 코드처럼 단순히 결과가 필요하지않고 반복적으로 작업만 하고 싶을 때 foreach를 사용해서 처리하면

더욱 수월하게 처리할 수 있게된다!

 

결론

Stream map: 최종연산을 해주지 않으면 결과가 반환되지않고, 내부적으로 호출하는 메소드 또한 호출을 하지않는다.

결국에는 최종연산이 필요한 작업에 적합한 스트림함수이다.

 

Stream foreach: 단순히 결과가 필요하지 않고 반복적으로 작업만 하고 싶을 경우 사용!

 

이상 정리 끝! 이상무!

728x90