코틀린 언어 정리 4-1
컬렉션 ( Collection )
Collection
코틀린에서 제공하는 Collection은 크게 List, Set, Map 3종류 이고 각각은 Read only( 읽기 전용 )와 Mutable( 읽기 쓰기 가능 )로 나뉩니다. List를 예로 들면, "List" 는 읽기 전용 이고 "MutableList"는 읽기 쓰기가 가능합니다. 또 List/Set/Map 각각은 구현된 방식이 여러가지 일 수 있으며 각각의 객체를 직접 명시적으로 사용할 수도 있습니다. List의 기본 구현은 ArrayList, Set의 기본 구현은 LinkedHashSet, Set의 다른 구현에는 HashSet이 있습니다. Map의 기본 구현은 LinkedHashMap, 다른 구현에는 HashMap이 있습니다.
예제
fun printAll(strings: Collection<String>) { for (s in strings) print("$s ") println() }
fun test() { val stringList = listOf("one", "two", "one") printAll(stringList) val stringSet = setOf("one", "two", "three") printAll(stringSet) } |
List
요소를 지정된 순서로 저장하고 색인된 인덱스로( 배열 처럼 )접근할 수 있습니다.
예제
fun test() { var list = mutableListOf(Pair("개", 1), Pair("고양이", 2), Pair("돼지", 3), Pair("말", 4), Pair("호랑이", 5)) list.add(Pair("양", 7)) println(list) list.remove(Pair("개", 1)) for (element in list) { println("${element.first}: ${element.second}") } } |
Set
고유한(중복되지 않는) 요소들의 집합입니다.
예제
fun main(args: Array<String>) { var mutableSet = mutableSetOf(Pair("개", 1), Pair("고양이", 2), Pair("돼지", 3), Pair("말", 4), Pair("호랑이", 5)) mutableSet.add(Pair("개", 7)) mutableSet.add(Pair("개", 1)) // 동일한 원소는 중복으로 추가되지 않음 mutableSet.add(Pair("개", 7)) // 동일한 원소는 중복으로 추가되지 않음 println(mutableSet) mutableSet.remove(Pair("개", 1)) for ( element in mutableSet ) { println ( "${element.first}: ${element.second}" ) } } |
Map
키-값 쌍의 집합( key-value pairs )입니다. key는 set과 동일하게 고유합니다.
예제
fun test () { var map = mutableMapOf("개" to 1, "고양이" to 2, Pair("돼지", 3), Pair("말", 4), "호랑이" to 5 ) for ( (key, value) in map ) { println ( "$key: $value" ) } println("개: ${map["개"]}") map.set("개", 0) println("개: ${map["개"]}") println ( map.containsValue ( 2 ) ) map["고양이"] = 20 println("고양이: ${map["고양이"]}") println ( map.containsValue ( 2 ) ) } |
Iterator
예제
fun test () { var mutableSet = mutableSetOf(Pair("개", 1), Pair("고양이", 2), Pair("돼지", 3), Pair("말", 4), Pair("호랑이", 5)) val setIter = mutableSet.iterator() while ( setIter.hasNext() ) { val cur = setIter.next() println ( cur ) } } |
List와 Set은 모두 Collection을 상속받았는데 Map은 Collection과 상관 없이 독립적으로 구현 되었습니다. 즉 함수의 매개변수 등으로 넘길 때 Map의 경우 Collection Type으로 전달 받을 수 없습니다. 하지만 List, Set, Map 들은 개념적 범주에서 모두 Collection으로 취급합니다.