시배's Android

Effective Kotlin | 8장. 효율적인 컬렉션 처리 본문

Book/Effective Kotlin

Effective Kotlin | 8장. 효율적인 컬렉션 처리

si8ae 2024. 3. 20. 22:42

아이템49. 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라

  • sequence 는 지연(lazy) 처리 된다. 따라서 시퀀스 처리 함수들을 사용하면, 데코레이터 패턴으로 꾸며진 새로운 시퀀스가 리턴된다.
    • 시퀀스 처리 함수는 최정 연산이 이루어지기 전까지는 각 단계에서 연산이 일어나지 않는다.
  • Iterable 은 처리 함수를 사용할 때마다 연산이 이루어져 List 가 만들어진다.
    • 컬렉션 처리 연산은 호출할 때 연산이 이루어진다.
  • 시퀀스의 지연 처리 장점
    • 자연스러운 처리 순서를 유지
    • 최소한만 연산
    • 무한 시퀀스 형태로 사용
    • 각각의 단계에서 컬렉션을 만들어 내지 않는다.
  • 시퀀스가 빠르지 않은 경우
    • 컬렉션 전체를 기반으로 처리해야 하는 연산은 시퀀스를 사용해도 빨라지지 않는다.
    • sorted 는 Sequence 보다 Collection 이 더 빠르다.
  • 자바의 스트림과 코틀린의 시퀀스의 차이점
    • 코틀린의 시퀀스가 더 많은 처리 함수를 갖고 있다.
    • 자바 스트림은 병렬 함수를 사용해서 병렬 모드로 실행할 수 있다.
    • 일반적으로 병렬 모드를 사용하지 않는다면, 자바 스트림과 코틀린 시퀀스 중에 어떤 것이 더 효율적이라고 단정지어서 이야기하기는 어렵다.
    • 병렬 모드가 필요한 경우에는 자바 스트림을 사용하고, 이외의 일반적인 경우에는 코틀린 시퀀스를 사용하자.

아이템50. 컬렉션 처리 단계 수를 제한하라

  • 적절한 메서드를 활용해서, 컬렉션 처리 단계 수를 적절하게 제한하는 것이 좋다.
  • 대부분의 컬렉션 처리 단계는 '전체 컬렉션에 대한 반복'과 '중간 컬렉션 생성'이라는 비용이 발생한다. 이 비용은 적절한 컬렉션 처리 함수들을 활용해서 줄일 수 있다.

아이템51. 성능이 중요한 부분에는 기본 자료형 배열을 사용하라

  • 성능이 중요한 코드라면 IntArray 와 LongArray 등의 기본 자료형을 활용하는 배열을 사용하는 것이 좋다.
  • 배열은 더 적은 메모리를 차지하고, 더 빠르게 동작한다.
  • 다만 일반적인 경우에는 List 를 사용하는 것이 좋다.
    • List 가 훨씬 더 기능이 다양하며, 더 많은 곳에 쉽게 사용될 수 있다.

아이템51. 성능이 중요한 부분에는 기본 자료형 배열을 사용하라

  • 성능이 중요한 코드라면 IntArray 와 LongArray 등의 기본 자료형을 활용하는 배열을 사용하는 것이 좋다.
  • 배열은 더 적은 메모리를 차지하고, 더 빠르게 동작한다.
  • 다만 일반적인 경우에는 List 를 사용하는 것이 좋다.
    • List 가 훨씬 더 기능이 다양하며, 더 많은 곳에 쉽게 사용될 수 있다.

아이템52. mutable 컬렉션 사용을 고려하라

  • immutable 컬렉션보다 mutable 컬렉션이 좋은 점은 성능적인 측면에서 더 빠르다는 것이다.
  • 지역 변수로 사용할 때는 mutable 컬렉션을 사용하는 것이 더 합리적이라고 할 수 있다.