immutable 컬렉션보다 mutable 컬렉션이 성능적인 측면에서 더 빠르다.
immutable 컬렉션에 요소를 추가하려면 새로운 컬렉션을 만들면서 여기에 요소를 추가해야 한다.
operator fun <T> Iterable<T>.plus(element: T): List<T> {
if (this is Collection) return this.plus(element)
val result = ArrayList<T>()
result.addAll(this)
result.add(element)
return result
}
이처럼 컬렉션을 복제하는 처리는 비용이 굉장히 많이 든다. 따라서 복제 처리가 필요없는 mutable 컬렉션이 성능적 관점에서 좋다.
다만 안정성 측면에서 immutable이 좋은데, 일반적인 지역 변수는 동기화나 캡슐화 관점에서 문제가 될 수 있는 경우에 해당되지 않는다. 따라서 지역 변수로 활용할 때는 mutable 컬렉션을 사용하는 것이 더 합리적이다.
정리
가변 컬렉션은 일반적으로 추가 처리가 빠르다.
immutable 컬렉션은 컬렉션 변경 관련 처리를 세부적으로 조정할 수 있다. 하지만 지역 스코프에서는 세부적인 조정이 필요하지 않으므로 가변 컬렉션을 사용하는 것이 좋다.
Reference
- 이펙티브 코틀린 - 프로그래밍 인사이트, 마르친 모스칼라 지음, 윤인성 옮김
개인적인 기록을 위해 작성된 글이라 잘못된 내용이 있을 수 있습니다.
오류가 있다면 댓글을 남겨주세요.