참고자료
ArrayList
1
2
3
val arrayList = ArrayList<String>()
arrayList.add("Kotlin")
arrayList.add("Java")
MutableList
1
2
3
4
5
6
7
8
9
10
11
12
13
val mutableList = mutableListOf<String>()
mutableList.add("Kotlin")
mutableList.add("Java")
/**
* Returns an empty new [MutableList].
* @sample samples.collections.Collections.Lists.emptyMutableList
*/
@SinceKotlin("1.1")
@kotlin.internal.InlineOnly
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
ArrayList vs MutableList in kotlin
차이는 없다. 어떤 자료를 살펴봐도 변함 없는것은 MutableList를 만들어도 결국에는 ArrayList를 반환하는 것이다.
그러면 왜 MutableList를 사용할까?
첫 번째 이유
는, 구체 클래스를 명시하는 것 보단 MutableList키워드를 통해 구현체를 알아서 땡겨 쓰도록 하는 것
두 번째 이유
는, 만약에 현재 존재하는 ArrayList가 취약점이 발견되어서 앞으로 그 구문을 쓰지않아야한다면?
ArrayList라고 직접 명시했다면 그 코드를 전부 고쳐야한다. 그렇지만 MutableList를 사용했다면 MutableList가 가리키는 구현체만 바꿔 끼워주기만하면된다.
구체 클래스에 의존하지 않고 인터페이스에 의존하는 낮은 결합도를 충족시킬 수 있는 장점이 있기 때문에 MutableList를 사용한다.
코틀린 공식문서에서는 기존 Java에서 사용하던 Collection들을 Mutable이라는 키워드를 붙여서 제공하는 것으로 나타내고 있는 점도 볼 수 있다.
그만큼 권장 한다는 스펙이라고 보면 될 것 같다.