List & Map
이번에는 대표적인 콜렉션(Collection)인 list와 키와 값을 가지는 저장 클래스인 map를 살펴보겠습니다. 코틀린에서는 Java를 포함한 다른 언어들과 다르게 list와 map을 읽기 전용(read only) 객체와 수정 가능한(mutable) 객체 두 가지로 형태로 나누어 제공합니다.
List
리스트를 만들 때 사용하는 함수는 listOf 입니다. 이렇게 생성시 읽기 전용 모드가 됩니다.
읽기 모드로 생성시 어차피 변경이 불가능하기 때문에 val로 선언해주는 것이 좋을 것 같습니다.
fun main(args: Array<String>) { val name = listOf("Kim", "Hong", "Park") for (i in 0..name.size-1) { println(name.get(i)) } // name.add("Choi") 읽기 전용이라 추가 불가 } |
Kim Hong Park |
수정 가능하게 만드려면 mutableListOf를 사용하면 됩니다.
fun main(args: Array<String>) { var name = mutableListOf<String>("Kim", "Hong", "Park") name.add("Choi") name.add("Seo") for (i in 0..name.size-1) { println(name.get(i)) } } |
Kim Hong Park Choi Seo |
(특이점) val name = mutableListOf<String>("Kim", "Hong", "Park")로 선언시에도 name.add는 가능합니다. 다만 name이 reassign 될 수 없을 뿐입니다.
Java에서도 final 변수이지만 arrayList의 데이터는 조작이 가능합니다.
import java.util.ArrayList; public class TestJava { public static void main(String[] args) { final ArrayList<String> arr = new ArrayList<>(); arr.add("TEST1"); arr.add("TEST2"); arr.add("TEST3"); for (String a : arr) { System.out.println(a); } } } |
TEST1 TEST2 TEST3 |
콜렉션에는 null을 필터할 수 있는 함수인 filterNotNull()이 존재합니다. 다음과 같이 null이 존재하면 null을 제외한 엘리먼트만 출력되는 것을 볼 수 있습니다.
fun main(args: Array<String>) { val name = listOf("Kim", "Hong", null, "Park") for (i in name.filterNotNull()) { println(i) } } |
Kim Hong Park |
또한 콜렉션에서는 +, - 를 사용하여 엘리먼트를 추가 및 삭제할 수 있습니다.
fun main(args: Array<String>) { val name = listOf("Kim", "Hong", null, "Park") for (i in name.filterNotNull()) { println(i) } println("-----") var newName = name - "Hong" for (i in newName.filterNotNull()) { println(i) } println("-----") newName = name + "Choi" for (i in newName.filterNotNull()) { println(i) } } |
Kim Hong Park ----- Kim Park ----- Kim Hong Park Choi |
Map
List와 유사하게 mapOf로 읽기 전용, mutableMapOf로 수정 가능한 Map을 만들 수 있습니다.
fun main(args: Array<String>) { val name = mapOf(1 to "Kim", 3 to "Park") for (i in name.keys) { println(name.get(i)) } for (i in name) { println(name) } } |
Kim Park {1=Kim, 3=Park} {1=Kim, 3=Park} |
fun main(args: Array<String>) { val name = mutableMapOf(1 to "Kim", 3 to "Park") name.put(2, "Hong")
for (i in name.keys) { println(name.get(i)) } for (i in name) { println(name) } } |
Kim Park Hong {1=Kim, 3=Park, 2=Hong} {1=Kim, 3=Park, 2=Hong} {1=Kim, 3=Park, 2=Hong} |
또한 +, - 를 사용할 수 있는데 value으로는 안되며 key로 가능합니다.
fun main(args: Array<String>) { val name = mapOf(1 to "Kim", 3 to "Park") for (i in name.keys) { println(name.get(i)) } println("-----") var newName = name - 3 for (i in newName.keys) { println(newName.get(i)) } } |
Kim Park ----- Kim |
'프로그래밍 > Kotlin' 카테고리의 다른 글
국가 수도 맞추기 앱 만들기 #02 (0) | 2018.02.11 |
---|---|
국가 수도 맞추기 앱 만들기 #01 (0) | 2018.02.06 |
코틀린으로 Activity에 Hello World 출력하기 (0) | 2018.01.21 |
코틀린(Kotlin) 배열(Array) (0) | 2018.01.11 |
코틀린(Kotlin) 리시버가 있는 함수 리터럴 (0) | 2018.01.05 |
코틀린 익명 함수 (Anonymous Function) (0) | 2018.01.02 |
코틀린 Lambda Expression Syntax (0) | 2017.12.21 |