Kotlin/Collection

[Kotlin Collection] Kotlin Mutable과 Immutable의 차이는 무엇인가? Mutable Interface의 관점에서 보는 코틀린의 가변성과 불변성

반응형

개요

 

 Kotlin의 Collection은 두가지 타입의 Interface를 제공한다. 한 가지는 변경 불가능(Immutable)한 Interface 이며 다른 하나는 변경 가능(Mutable)한 Interface이다.  

 더욱 자세히 들어가면 Immutable Interface와 Mutable Interface는 아래 [그림1]과 같은 상속 구조를 가진다. Immutable Interface에서는 값을 변경할 수 있는 함수를 제공하지 않으며, Immutable Interface를 확장하는 Mutable Interface에서 값을 변경하는 메서드를 제공한다.

 

 

 

그림1. Kotlin Collection Interface

 

 

필요성

 

 Kotlin에서 이렇게 Immutable Interface와 Mutable Interface를 나눈 것은 불변성이 중요한 함수형 프로그래밍을 돕기 위해서로 보여진다. 함수형 프로그래밍에서는 동작에서 사용하는 변수의 상태가 변화할 시, 입력 값에 따라 출력 값이 달라지는 부수효과가 생길 수 있다. Kotlin에서는 이러한 부수효과를 코드 단에서 차단하기 위해 Immutable Interface와 Mutable Interface 간의 분리를 해놓았다. 

 

 

구현

 

 그렇다면 실제 Collection 타입 사용 시 Immutable Interface와 Mutable Interface는 어떻게 구현되어 있는지 살펴보자. 아래는 List Interface에 대한 Interface의 상속구조이다. 

 

그림2. Immutable Interface&Mutable Interface

 MutableList는 List Interface와 MutableCollection Interface를 확장하며, ArrayList는 MutableList Interface를 확장한다. 이러한 방식을 통해 자바에서 사용되는 ArrayList는 자바의 코드에서 코드를 그대로 가져옴과 동시에 MutableList Interface를 상위 타입으로 갖는 것처럼 취급된다. 이러한 방식을 통해 코틀린은 자바 호환성을 제공하면서 Immutable Interface와 Mutable Interface를 나눈다. 

반응형

 

이 글의 저작권은 Kotlin World 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.