시배's Android
si8ae
시배's Android
Effective Kotlin | 8장. 효율적인 컬렉션 처리 본문
아이템49. 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라
- sequence 는 지연(lazy) 처리 된다. 따라서 시퀀스 처리 함수들을 사용하면, 데코레이터 패턴으로 꾸며진 새로운 시퀀스가 리턴된다.
- 시퀀스 처리 함수는 최정 연산이 이루어지기 전까지는 각 단계에서 연산이 일어나지 않는다.
- Iterable 은 처리 함수를 사용할 때마다 연산이 이루어져 List 가 만들어진다.
- 컬렉션 처리 연산은 호출할 때 연산이 이루어진다.
- 시퀀스의 지연 처리 장점
- 자연스러운 처리 순서를 유지
- 최소한만 연산
- 무한 시퀀스 형태로 사용
- 각각의 단계에서 컬렉션을 만들어 내지 않는다.
- 시퀀스가 빠르지 않은 경우
- 컬렉션 전체를 기반으로 처리해야 하는 연산은 시퀀스를 사용해도 빨라지지 않는다.
- sorted 는 Sequence 보다 Collection 이 더 빠르다.
- 자바의 스트림과 코틀린의 시퀀스의 차이점
- 코틀린의 시퀀스가 더 많은 처리 함수를 갖고 있다.
- 자바 스트림은 병렬 함수를 사용해서 병렬 모드로 실행할 수 있다.
- 일반적으로 병렬 모드를 사용하지 않는다면, 자바 스트림과 코틀린 시퀀스 중에 어떤 것이 더 효율적이라고 단정지어서 이야기하기는 어렵다.
- 병렬 모드가 필요한 경우에는 자바 스트림을 사용하고, 이외의 일반적인 경우에는 코틀린 시퀀스를 사용하자.
아이템50. 컬렉션 처리 단계 수를 제한하라
- 적절한 메서드를 활용해서, 컬렉션 처리 단계 수를 적절하게 제한하는 것이 좋다.
- 대부분의 컬렉션 처리 단계는 '전체 컬렉션에 대한 반복'과 '중간 컬렉션 생성'이라는 비용이 발생한다. 이 비용은 적절한 컬렉션 처리 함수들을 활용해서 줄일 수 있다.
아이템51. 성능이 중요한 부분에는 기본 자료형 배열을 사용하라
- 성능이 중요한 코드라면 IntArray 와 LongArray 등의 기본 자료형을 활용하는 배열을 사용하는 것이 좋다.
- 배열은 더 적은 메모리를 차지하고, 더 빠르게 동작한다.
- 다만 일반적인 경우에는 List 를 사용하는 것이 좋다.
- List 가 훨씬 더 기능이 다양하며, 더 많은 곳에 쉽게 사용될 수 있다.
아이템51. 성능이 중요한 부분에는 기본 자료형 배열을 사용하라
- 성능이 중요한 코드라면 IntArray 와 LongArray 등의 기본 자료형을 활용하는 배열을 사용하는 것이 좋다.
- 배열은 더 적은 메모리를 차지하고, 더 빠르게 동작한다.
- 다만 일반적인 경우에는 List 를 사용하는 것이 좋다.
- List 가 훨씬 더 기능이 다양하며, 더 많은 곳에 쉽게 사용될 수 있다.
아이템52. mutable 컬렉션 사용을 고려하라
- immutable 컬렉션보다 mutable 컬렉션이 좋은 점은 성능적인 측면에서 더 빠르다는 것이다.
- 지역 변수로 사용할 때는 mutable 컬렉션을 사용하는 것이 더 합리적이라고 할 수 있다.