코틀린(Kotlin)

코틀린(kotlin) : 코틀린의 Collections - read only, mutable

알통몬_ 2019. 8. 21. 14:44
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


코틀린에도 자바처럼 Collections 가 존재합니다. 

이번 포스팅에서는 코틀린의 Collections 에 대해 공부합니다.


많은 프로그래밍 언어에서 Collection은 공통의 컨셉을 가지는데요,

Collection 은 일반적으로 0개 또는 많은 수의 같은 타입의 오브젝트를 포함합니다.

그리고 이 오브젝트를 Collection에서는 

elements 또는 items 라고 부릅니다.


List : index로 접근할 수 있는 순서가 있는 collection입니다.

index는 0 이상의 양의 정수 값을 가지고, 

해당 정수 값이 position이 됩니다.

Elements는 한 개 이상 존재할 수 있습니다. 


Set : 유니크한 elements의 collection 입니다. 

중복이 없는 오브젝트 그룹입니다.

예를들면 알파벳은 글자의 Set 입니다.


Map : Key-Value 쌍을 가지는 collection입니다. 

(dictionary 라고도 한다네요.)

Keys 들은 유니크한 값들이며 

각 Key에는 하나의 Value들이 반드시 존재합니다.

Value는 중복될 수 있습니다. 

==========================================


Collection Types

 : Kotlin Starndard Library 는 sets, lists and maps 에 대한 인터페이스를 제공합니다.

 - 읽기 전용 인터페이스는 collection 요소에 접근할 수 있도록 제공합니다.

 - mutable 인터페이스는 읽기 전용 인터페이스를 상속받아 

   쓰기 작업도 할 수 있게 제공합니다. ( adding, removing, updating its elements)


mutable collection 이라고 해서 꼭 var 를 사용할 필요는 없습니다.

val을 사용해도 됩니다. 하지만 val 로 선언한 mutable collection에 새로운 값을

할당하려 한다면 당연하게도 컴파일 에러가 발생합니다.

package com.example.kotlinplayground

fun main() {
val numbers = mutableListOf("one", "two", "three", "four")
numbers.add("five") // element 의 추가는 가능합니다.
//numbers = mutableListOf("six", "seven") // 컴파일에러
}


읽기전용 collection 타입은 covariant(공변하는) 합니다.

이 말은 Shape라는 클래스를 상속받는 Rectangle 클래스가 있다면,

List<Shape>가 사용되는 모든 곳에 

List<Rectangle>을 사용할 수 있습니다.

다른 말로, collection 타입은 

elements 타입과 동일한 하위 관계를 가집니다.

Map의 경우도 마찬가지이지만, Key 타입의 경우는 제외됩니다.


mutable collection의 경우는 covariant 하지 않습니다.

그렇지 않을 경우 런타임 에러가 발생합니다.

만약 MutableList<Shape> 의 하위 타입 MutableList<Rectangle>에 또 다른 하위 타입을 넣는다면 (e.g. Circle), Rectangle 타입 아규먼트를 위반하는 결과를 가져옵니다.

아래는 Kotlin collection interfaces 의 다이어그램입니다.

여기서 마치고, 다음 포스팅에서 Collection의 List, Set, Map 에 대해 공부합니다.

반응형