표준 컬렉션 처리는 내부적으로 계산을 위해 추가적인 컬렉션을 만들어 사용한다.
시퀀스 처리 또한 전체를 랩 하는 객체가 만들어지며, 조작을 위해 추가적인 객체를 만들어 낸다.
두처리 모두 요소의 수가 많다면 꽤 큰 비용이 들어간다. 따라서 컬렉션 처리 단계 수를 적절하게 제한하는게 좋다.
-
효율적인 처리를 위한 컬렉션 처리 단계 수 줄이기
fun List<Student>.getNames(): List<String> = this .map { it.name } .filter { it != null } .map {it !! }
아래와 같은 코드로 처리 단계를 하나 줄일 수 있다.
fun List<Student>.getNames(): List<String> = this .map { it.name } .filterNotNull()
그리고 아래와 같이 mapNotNull로 한번의 처리 단계 만으로도 사용할 수 있다.
fun List<Student>.getNames(): List<String> = this .mapNotNull { it.name }
효율적인 처리를 위해 어떤 메소드가 있는지 확인해보는 것이 좋다.
정리
대부분의 컬렉션 처리 단계는 전체 컬렉션에 대한 반복, 중간 컬렉션 생성이라는 비용이 발생하므로 적절한 컬렉션 처리 함수를 활용해 단계를 줄이자.
Reference
- 이펙티브 코틀린 - 프로그래밍 인사이트, 마르친 모스칼라 지음, 윤인성 옮김
개인적인 기록을 위해 작성된 글이라 잘못된 내용이 있을 수 있습니다.
오류가 있다면 댓글을 남겨주세요.