99클럽 7일차 TIL: Collectors.toList() vs. toList()
2024. 4. 10. 14:45ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
자바스프링에서의 Stream 을 사용해 filter, map 등을 쓴 뒤 stream을 다시 리스트로 만들어서 리턴하고 싶을 때, 사용 가능한 두 가지 메서드 중 어떤 거를 선택해야 될까?
- 자바 스프링으로 개발을 하다보면, 리스트에 대해서 map, filter 등 stream 메서드를 적용해야되는 경우가 많다. 그런데 그 직후 intellij 에서 제공해주는 메서드가 두가지가 있는데, 이를 혼용해도 상관이 없을까 하였는데, 그게 아니었다.
- 일반적으로 intellij 는 toList()를 쓰도록 권장을 한다.
- 그러나 바꾸고 나서 오류가 뜨는 상황이 오히려 생길 때도 있다.
- collect(Collectors.toList())
- 자바 stream의 collect 메서드를 사용하여 요소를 리스트로 수집하는 것을 의미
- Collectors.toList() 는 스트림에서 요소를 수집하여 리스트를 반환한다.
- toList()
- 자바 16부터 도입된 stream의 새로운 메서드
- Collectors.toList()와 기능적으로는 동일
- 일반적으로 intellij 는 toList()를 쓰도록 권장을 한다.
- 컴파일 타임에서 Collectors.toList() 를 사용했을 때는 문제가 없다가, toList() 를 사용했을 때 문제가 생기는 경우가 있었다.
#2. 공부한 내용
- 주요 차이점
- 수정 가능 여부
- Collectors.toList()
- ArrayList 를 반환한다.
- 즉 반환되는 리스트는 수정이 가능함
- toList()
- unmodifiable List 를 반환한다.
- 즉 반환되는 리스트는 수정이 불가능함.
- Collectors.toList()
- 버전 지원 차이
- Collectors.toList()
- 자바 8 이상
- toList()
- 자바 16이상
- Collectors.toList()
- *java generic type erasure
- Collectors.toList()
- 와일드카드 허용
- 유연성 제공
- toList()
- stream 의 요소 타입으로 그대로 반환
- 그렇기에 같은 상황이더라도 collectors.toList() 일 때와 달리 오류가 생길 수 있음
- 컴파일 타임에서 IDE는 toList()를 권장하다가, 정작 런타임 때 toList()가 오류가 날 수도 있음
- Collectors.toList()
- 수정 가능 여부
//오류 X
List<Number> list = Stream.of("1", "2", "3")
.map(Integer::parseInt)
.collect(Collectors.toList());
//오류 O
List<Number> list = Stream.of("1", "2", "3")
.map(Integer::parseInt)
.toList();
//오류 O
List<Number> list = Stream.of("1", "2", "3")
.<Number>map(Integer::parseInt)
.toList();
- 참조:
#3. 오늘의 회고
- 명칭이 비슷하고, 용도가 거의 흡사한 두 메서드가 있을 때, 더 복잡하고, IDE도 외면하더라도 아직 deprecated 가 되지 않았다면, 필히 다른 용도가 있으리라 생각하는 게 좋을 것 같다.
- 즉 IDE 가 유도하는 대로 편한 길로만 걷다가는 이런 사소한 차이를 놓치기가 쉽고, 이런 이유로 추후 오류가 생겼을 때 간과하는 지점들이 생겨나갈 마련이다.
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 10일차 TIL: POJO 클래스 (2) | 2024.04.13 |
---|---|
99클럽 9일차 TIL: Bean 관련 에러 (0) | 2024.04.12 |
99클럽 6일차 TIL: Unix Time (nanoseconds) (0) | 2024.04.09 |
99클럽 5일차 TIL: Loki (0) | 2024.04.08 |
99클럽 4일차 TIL: Collectors.toMap() (2) | 2024.04.07 |