본문 바로가기
Kotlin

Kotlin List, Map

by 봄석 2019. 1. 23.

출처 - https://brunch.co.kr/@mystoryg/28


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 될 수 없을 뿐입니다. 왜냐하면 val은 변수(name)가 불변하도록 하는 것이지 객체가 불변하도록 하는 것이 아니기 때문입니다.


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


댓글