본문 바로가기
개발공부 개발새발/JAVA

JAVA ) List.size() == 0 일 때, forEach 를 사용해도 예외가 발생하지 않을까?

by 휴일이 2024. 1. 10.

 

 

 

forEach() 는 java 8 부터 나온 손쉽게 for 문을 돌릴 수 있는 기능이다.

 

예를 들어

        List<User> userList = userRepository.findAll();
        List<UserSignUpDto> userSignUpDtoList = new ArrayList<>();
        
        userList.forEach(user -> 

            userSignUpDtoList.add(
                    UserSignUpDto.builder()
                            .email(user.getEmail())
                            .password(user.getPassword())
                            .build()
            )
            
        );

 

 

이렇게 리스트에 있는 유저를 DTO에 옮겨 리스트에 담고 싶다면

forEach로 손쉽고^_^ 깔끔하게 옮길 수 있단 사실~

 

 

그런데 급 궁금증이 들었다 ㅡ.ㅡ

만약 ListSize() 가 0 이라면, forEach 는 동작하지 않을 텐데

그러면 예외를 발생시킬까?

 

지금은 PM님도 안 건드린다는 점심 시간.

이 시간을 틈타 테스트해보자.

 

 

    void forEach도는지_테스트() {

        List<User> userList = new ArrayList<>();
        List<UserSignUpDto> userSignUpDtoList = new ArrayList<>();

        userList.forEach(user -> {

            userSignUpDtoList.add(
                    UserSignUpDto.builder()
                            .email(user.getEmail())
                            .password(user.getPassword())
                            .build()
            );
                }

        );
    }

 

 

 

이제 돌려보자

 

 

 

정상적으로 동작하는 것을 알 수 있다.

 

 

 

그런데 두 번째 궁금증이 생겼다.

stream() 에서도 forEach() 를 사용 가능하다.

스트림은 forEach 뿐만 아니라 filter 등 함수 여러개를 조합해서 병렬처리할 수 있는 기능 아주 멋진 기능이다.

한 마디로 반복 작업을 한번에 쇽쇽쇽 할 수 있다는 얘기지..

여기에서 forEach 를 사용해도 예외가 발생하지 않을까?

시도해보자!

 

 

    void streamForEach도는지_테스트() {

        List<User> userList = new ArrayList<>();
        List<UserSignUpDto> userSignUpDtoList = new ArrayList<>();

        userList.stream().forEach(user -> {

            userSignUpDtoList.add(
                    UserSignUpDto.builder()
                            .email(user.getEmail())
                            .password(user.getPassword())
                            .build()
            );
                }

        );
    }

 

 

결과는?

 

뭐가 없넹? 쩝,,, 노잼(?)

 

병렬 처리 작업이라 뭔가 더 있지 않을까 생각했는데

생각해보면 한 스레드가 작업을 뭉탱이로 묶어서 하는 것뿐이고,,

멀티스레드 "처럼" 이지 멀티스레드 작업은 아니니께 뭐,,ㅎㅋㅎㅋ

 

이제 forEach 를 쓸 때 사이즈 체크는 굳이 하지 않는 걸로 !

이렇게 하나 또 알아갑니다.. ㅎㅁㅎ

728x90