배너 이미지

collect(Collectors.toList()) vs Stream.toList()

2025. 6. 7. 21:11·CS공부/Java & Spring

Java 16 이후, 자바에서는 Stream.toList()라는 새로운 메서드를 제공하여 기존의 collect(Collectors.toList()) 방식을 대체할 수 있게 되었습니다.

✅ 핵심 차이점 요약

항목 collect(Collectors.toList()) Stream.toList()
도입 버전 Java 8 이상 Java 16 이상
반환 타입 ArrayList or other mutable list 불변 리스트 (Immutable List)
외부 라이브러리 의존 필요 (Collectors) 불필요
변경 가능 여부 가능 (mutable) 불가능 (immutable)
스레드 안정성 불안정 불안정 (불변이지만 thread-safe 아님)

📌 예시 코드 비교

1. Java 8 방식 - Collectors.toList()

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

List<String> list = Stream.of("a", "b", "c")
                          .collect(Collectors.toList());

list.add("d"); // 가능
System.out.println(list); // [a, b, c, d]

2. Java 16 방식 - Stream.toList()

import java.util.List;
import java.util.stream.Stream;

List<String> list = Stream.of("a", "b", "c")
                          .toList();

list.add("d"); // UnsupportedOperationException 발생

⚠️ 주의할 점

  • toList()로 생성된 리스트는 불변(immutable) 이므로 add, remove 등의 조작이 불가능합니다.
  • Collectors.toList()는 매번 새로운 ArrayList를 생성하며, 수정 가능한 리스트를 원할 때 사용합니다.
  • 프로젝트에서 Java 16 이상을 사용한다면, 불변 리스트가 필요한 경우에만 toList()를 활용하세요.

🧾 정리

  • Java 8 이하: 무조건 collect(Collectors.toList()) 사용
  • Java 16 이상:
    • 리스트 수정이 필요하면 Collectors.toList()
    • 불변 리스트가 필요하면 toList() 추천
  • 코드 가독성 면에서는 toList()가 간결하고 선언적입니다.

'CS공부 > Java & Spring' 카테고리의 다른 글

OAuth2 기반 Google & Kakao 로그인 구축 방법  (0) 2025.06.30
문자열 클래스 정리: String vs StringBuffer vs StringBuilder  (0) 2025.05.25
JWT 인증 및 토큰 기반 인증 시스템 정리  (0) 2025.04.28
즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)  (0) 2025.04.23
Spring Boot의 Bean과 어노테이션  (1) 2025.04.23
'CS공부/Java & Spring' 카테고리의 다른 글
  • OAuth2 기반 Google & Kakao 로그인 구축 방법
  • 문자열 클래스 정리: String vs StringBuffer vs StringBuilder
  • JWT 인증 및 토큰 기반 인증 시스템 정리
  • 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • 개발자 (77)
      • n8n (2)
      • CS공부 (46)
        • Java & Spring (15)
        • 인프라 (7)
        • 운영체제 & 시스템 (9)
        • 기타 CS지식 (7)
        • 네트워크 (6)
        • 데이터베이스 (2)
      • 알고리즘 (16)
      • 프로젝트 (8)
        • 감정&금융챗봇 (8)
      • 리팩토링 (5)
        • horong (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바