인프런 커뮤니티 질문&답변

김태준님의 프로필 이미지
김태준

작성한 질문수

코틀린 고급편

13강. 고차 함수와 함수 리터럴

Sequence vs Stream

작성

·

127

1

안녕하세요
Sequence와 Stream의 차이점에 대해서 질문드립니다.

Sequence가 지연연산의 이점을 통해서

대용량 처리를 해야할 때 이점을 줄 수 있다고 이해를 했고,
Java의Stream과 유사하다는 생각이 들었습니다.

 

찾아보니, java8 이전의 Kotlin의 경우 Stream을 사용할 수 없으니, Sequence를 사용했었다 라는 글을 발견했습니다.

위 설명이 맞을까요?
혹시 맞다면 어떠한 기준으로 둘중에서 선택을 하는게 좋을까요?

답변 1

1

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요 태준님! 🙂 좋은 질문 주셔서 감사합니다. 👍

 

이해해 주신 것처럼, Sequence 는 지연 연산의 이점을 통해 대용량 처리를 할 때 유용하게 쓸 수 있고, 이는 자바의 Stream 도 마찬가지입니다. Stream 역시 지연 연산 방식으로 동작하죠.

 

찾아보니, java8 이전의 Kotlin의 경우 Stream을 사용할 수 없으니, Sequence를 사용했었다 라는 글을 발견했습니다.

로 찾아주신 설명은 맞습니다. 그 이유는, 자바의 Stream 자체가 자바 8 에서 등장했기 때문입니다. 코틀린은 JDK 버전을 비교적 자유롭게 선택해 사용할 수 있다보니, 만약 코틀린을 JDK 1.8 미만의 버전과 사용한다면, Stream 은 사용할 수 없는 것이 맞습니다.

 

만약 JDK 1.8 (자바 8 버전) 이상의 환경에서 Kotlin을 사용하신다면, Stream을 사용할 수도 있고, Sequence도 사용할 수 있습니다! 저 개인적으로는 Kotlin을 사용할 경우 Stream 보다는 Sequence 를 선호하는데요! 그 이유는, Kotlin으로 만들어진 Sequence 는 내부적으로 inline 함수 등을 사용해 함수형 프로그래밍을 할 때 필요한 최적화를 해두었기 때문입니다. 반면, Stream 의 경우 100% Java 코드로 만들어졌기 때문에 코틀린을 고려한 최적화가 되어 있지는 않죠. 따라서 Sequence 사용을 조금 더 추천드립니다.

 

답변이 도움이 되었으면 좋겠습니다.

감사합니다! 🙏

김태준님의 프로필 이미지
김태준

작성한 질문수

질문하기