๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ/๐Ÿ“—Kotlin

[Kotlin] ์ปฌ๋ ‰์…˜

๐Ÿ’ก๋ฐฐ์—ด, List, Map, Set๐Ÿ’ก

 


โ–ช๏ธ๋ฐฐ์—ด

· 0๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

· ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐฐ์—ด์— ๋‹ด์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ œํ•œํ•˜์—ฌ ๊ฐ’์„ ๋‹ด์„ ์ˆ˜๋„ ์žˆ๋‹ค.

fun main() {
    // ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด contentToString()
    val arr1 = arrayOf(10, 20, 30, 40, 50)
    println("arr1 : $arr1")
    println("arr1 : ${arr1.contentToString()}")

    // ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ๋„ฃ๊ธฐ
    val arr2 = arrayOf(10, 20.0, "๊ฐ€๋‚˜๋‹ค", true)
    println("arr2 : ${arr2.contentToString()}")

    // ํ•œ ๊ฐ€์ง€ ํƒ€์ž…๋งŒ ๋„ฃ๊ธฐ
    // ๋งจ ์•ž์— ํƒ€์ž…+ArrayOf๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜ ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ
    val arr3 = intArrayOf(10, 20, 30, 40, 50)
    val arr4 = arrayOf<Double>(1.0, 2.0, 3.0, 4.0, 5.0)
    println("arr3 : ${arr3.contentToString()}")
    println("arr4 : ${arr4.contentToString()}")
}

 

๋ฐฐ์—ด ์ƒ์„ฑ

· arrayOf ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ Array ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

fun main() {
    // ํฌํ‚ค๋Š” 5, ๊ฐ’๋“ค์€ 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ
    val arr1 = Array(5, {0})
    println("arr1 : ${arr1.contentToString()}")

    // ๋žŒ๋‹ค๋ฅผ ์ด์šฉ
    // it์—๋Š” 0๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐ
    val arr2 = Array(5) {it * 2}
    println("arr2 : ${arr2.contentToString()}")
}

 

for๋ฌธ ์‚ฌ์šฉ

· ๋ฐฐ์—ด์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์˜ ํฌ๊ธฐ๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

fun main() {
    val arr1 = arrayOf(10, 20, 30, 40, 50)
    for(item in arr1) {
        print("$item, ")
    }
}

 

๋‹ค ์ฐจ์› ๋ฐฐ์—ด

· ๋ฐฐ์—ด ์•ˆ์— ๋ฐฐ์—ด์ด ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

fun main() {
    val arr1 = arrayOf(arrayOf(10, 20, 30), arrayOf(40, 50, 60), arrayOf(70, 80, 90))
    // ์ฃผ์†Œ๊ฐ’๋งŒ ๋‚˜์˜ด
    println("arr1 : $arr1")
    println("arr1 : ${arr1.contentToString()}")
    // ๊ฐ’๋“ค์„ ๋‚˜์˜ค๊ฒŒ ํ•˜๋ ค๋ฉด contentDeepToString()
    println("arr1 : ${arr1.contentDeepToString()}")

    // ๋‹ค ์ฐจ์› ๋ฐฐ์—ด์„ for๋ฌธ์— ์‚ฌ์šฉ
    for(item1 in arr1) {
        for(item2 in item1) {
            print("$item2, ")
        }
    }
}

 

๋ฐฐ์—ด ์š”์†Œ ์ ‘๊ทผ

fun main() {
    // ํŠน์ • ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
    val arr1 = arrayOf(10, 20, 30, 40, 50)
    println("arr1 0 : ${arr1[0]}")
    println("arr1 1 : ${arr1[1]}")
    println("arr1 2 : ${arr1[2]}")
    println("arr1 3 : ${arr1[3]}")
    println("arr1 4 : ${arr1[4]}")

    // ๊ฐ’ ์ˆ˜์ •ํ•˜๊ธฐ
    arr1[0] = 100
    arr1.set(1, 200)
    println("arr1 : ${arr1.contentToString()}")

    // ๋ฐฐ์—ด์˜ ํฌ๊ธฐ
    println("arr1 size : ${arr1.size}")
}

 

๋ฐฐ์—ด์˜ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋“ค

· Kotlin์—์„œ๋Š” Java๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

· ์ด ๋ฐ–์—๋„ ๋” ๋งŽ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

fun main() {
    val arr1 = arrayOf(10, 20, 30, 40, 50)

    // ๋ฐฐ์—ด ์ถ”๊ฐ€ํ•˜๊ธฐ
    val arr2 = arr1.plus(60)
    println("arr2 : ${arr2.contentToString()}")

    // ํŠน์ • ๋ถ€๋ถ„ ๊ฐ€์ ธ์˜ค๊ธฐ (1 ~ 3)
    val arr3 = arr1.sliceArray(1..3)
    println("arr3 : ${arr3.contentToString()}")

    println("์ฒซ ๋ฒˆ์งธ ๊ฐ’ : ${arr1.first()}")
    println("๋งˆ์ง€๋ง‰ ๊ฐ’ : ${arr1.last()}")
    println("30์˜ ์œ„์น˜ : ${arr1.indexOf(30)}")
    println("ํ‰๊ท  ๊ฐ’ : ${arr1.average()}")
    println("ํ•ฉ์นœ ๊ฐ’ : ${arr1.sum()}")
    println("๊ฐœ์ˆ˜ : ${arr1.count()}")
    println("๊ฐœ์ˆ˜ : ${arr1.size}")
    println("30์„ ํฌํ•จํ•˜๋Š”์ง€ : ${arr1.contains(30)}")
    println("1000์„ ํฌํ•จํ•˜๋Š”์ง€ : ${arr1.contains(1000)}")
    println("30์„ ํฌํ•จํ•˜๋Š”์ง€ : ${30 in arr1}")
    println("1000์„ ํฌํ•จํ•˜๋Š”์ง€ : ${1000 in arr1}")
    
    val arr4 = arrayOf(5, 1, 3, 4, 2)
    // ์˜ค๋ฆ„์ฐจ์ˆœ
    val arr5 = arr4.sortedArray()
    println("arr5 : ${arr5.contentToString()}")
    // ๋‚ด๋ฆผ์ฐจ์ˆœ
    val arr6 = arr4.sortedArrayDescending()
    println("arr6 : ${arr6.contentToString()}")
}

 

 

โ–ช๏ธList

· ๋ฐฐ์—ด๊ณผ ๋™์ผํ•˜๊ฒŒ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

· ๋ฐฐ์—ด์€ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง€๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์ง€๋งŒ List๋Š” ์ถ”๊ฐ€, ์‚ญ์ œ ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

fun main() {
    // ๋ถˆ๋ณ€ํ˜• ๋ฆฌ์ŠคํŠธ
    val list1 = listOf(10, 20, 30, 40, 50)
    println("list1 : $list1")

    // ๊ฐ€๋ณ€ํ˜• ๋ฆฌ์ŠคํŠธ
    // ๊ฐ’์ด ์—†๋‹ค๋ฉด ์ œ๋„ค๋ฆญ์œผ๋กœ ํƒ€์ž…์„ ์ •ํ•ด์ค˜์•ผ ํ•จ
    val list2 = mutableListOf<Int>()
    // String ํƒ€์ž…์˜ ๊ฐ’์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ์ถ”๋ก  ๊ฐ€๋Šฅ
    val list3 = mutableListOf("๊ฐ€", "๋‚˜", "๋‹ค")
    println("list2 : $list2")
    println("list3 : $list3")

    // ๋น„์–ด์ ธ์žˆ๋Š” ๋ถˆ๋ณ€ํ˜•๋ฆฌ์ŠคํŠธ
    val list4 = emptyList<Int>()
    println("list4 : $list4")
    
    // null์„ ์ œ์™ธํ•œ ๊ฐ’๋“ค์„ ์‚ฌ์šฉ
    val list5 = listOfNotNull(10, 20, null, 30, null, 40, 50)
    println("list5 : $list5")
}

 

for๋ฌธ ์‚ฌ์šฉ

fun main() {
    val list1 = listOf(10, 20, 30, 40, 50)

    for(item in list1) {
        print("$item, ")
    }
}

 

List ์š”์†Œ ์ ‘๊ทผ

fun main() {
    val list1 = listOf(10, 20, 30, 40, 50)

    // ํŠน์ • ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
    println("list1 0 : ${list1.get(0)}" )
    println("list1 1 : ${list1[1]}" )

    val list2 = listOf(10, 20, 30, 40, 50, 10)

    // ํŠน์ • ์š”์†Œ ์ฐพ๊ธฐ
    val index1 = list2.indexOf(10)
    println("10 index : $index1")

    // indexOf : ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐพ์Œ
    // lastIndexOf : ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฐพ์Œ
    val index2 = list2.lastIndexOf(10)
    println("10 index : $index2")

    // ํŠน์ • ๊ฐ’์„ ์ถ”์ถœํ•ด ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑ
    val list3 = list1.subList(1, 3)
    println("list3 : $list3")
}

 

๊ฐ€๋ณ€ํ˜• ๋ฆฌ์ŠคํŠธ์˜ ๋ฉ”์„œ๋“œ

fun main() {
    val list1 = mutableListOf<Int>()

    // ์ถ”๊ฐ€ํ•˜๊ธฐ
    list1.add(10)
    list1.add(20)
    list1.add(30)
    println("list1 : $list1")

    // ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ์ถ”๊ฐ€
    list1.addAll(listOf(40, 50, 60))
    println("list1 : $list1")

    // ํŠน์ • ์š”์†Œ ์‚ฝ์ž… (index 1์„ 100์œผ๋กœ ๋ณ€๊ฒฝ)
    list1.add(1, 100)
    println("list1 : $list1")

    // ์ „์ฒด ์‚ฝ์ž…
    list1.addAll(2, listOf(400, 500, 600))
    println("list1 : $list1")

    // ํŠน์ • ์š”์†Œ ์‚ญ์ œ
    list1.remove(100)
    println("list1 : $list1")

    // ํŠน์ • ์š”์†Œ๋“ค ์‚ญ์ œ
    list1.removeAll(listOf(400, 500))
    println("list1 : $list1")

    // ํ•ด๋‹น ์ธ๋ฑ์Šค ์‚ญ์ œ
    list1.removeAt(1)
    println("list1 : $list1")

    // ๊ฐ’ ๋ณ€๊ฒฝ
    list1.set(0, 100)
    list1[1] = 200
    println("list1 : $list1")

    val list2 = listOf<Int>()

    // ๋ถˆ๋ณ€ํ˜• -> ๊ฐ€๋ณ€ํ˜•
    // ๊ฐ’๋“ค์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ๊ฐ€๋ณ€ํ˜•์œผ๋กœ ๋ฐ”๊พผ๋‹ค
    val list3 = list2.toMutableList()
    list3.add(100)
    println("list3 : $list3")

    // ๊ฐ€๋ณ€ํ˜• -> ๋ถˆ๋ณ€ํ˜•
    val list4 = list3.toList()
    // ๊ฐ€๋ณ€ํ˜•์ด๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋œธ
    //list4.add(200)
}

 

 

โ–ช๏ธMap

· List๋Š” index ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ด€๋ฆฌ๋ฅผ ํ–ˆ๋‹ค๋ฉด Map์€ ์ด๋ฆ„์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.

fun main() {
    // ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ ํ•  ํƒ€์ž…, ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•จ
    // ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ
    // ๋ถˆ๋ณ€ํ˜•
    val map1 = mapOf("key1" to 10, "key2" to 20, "key3" to 30)
    println("map1 : $map1")

    // ๊ฐ€๋ณ€ํ˜•
    val map2 = mutableMapOf<String, Int>()
    println("map2 : $map2")

    // ํƒ€์ž…์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์“ด๋‹ค๋ฉด Any๋ฅผ ์“ฐ๋ฉด ๋จ
    val map3 = mutableMapOf<String, Any>("key1" to 10, "key2" to "๊ฐ€", "key3" to false)
    println("map3 : $map3")

    // ๊ฐ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ
    println("map1 key1 : ${map1.get("key1")}")
    println("map1 key2 : ${map1["key2"]}")

    // ๋ฉ”์„œ๋“œ
    println("map1 size : ${map1.size}")
    println("map1 keys : ${map1.keys}")
    println("map1 values : ${map1.values}")

    // key๋กœ ์œ ๋ฌด ํ™•์ธ
    println("map1 containts key1 : ${map1.containsKey("key1")}")
    println("map1 containts key100 : ${map1.containsKey("key100")}")

    // value๋กœ ์œ ๋ฌด ํ™•์ธ
    println("map1 containts value 10 : ${map1.containsValue(10)}")
    println("map1 containts value 100 : ${map1.containsValue(100)}")

    // ๊ฐ€๋ณ€ํ˜• Map์˜ ๋ฉ”์„œ๋“œ
    println("map2 : $map2")

    // ์ถ”๊ฐ€ํ•˜๊ธฐ
    map2.put("key1", 100)
    println("map2 : $map2")

    // ์—†๋Š” ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๊ฐ€ ๋จ
    map2["key2"] = 200
    println("map2 : $map2")

    // ๊ฐ™์€ ์ด๋ฆ„์ด ์กด์žฌํ•œ๋‹ค๋ฉด value ๋ณ€๊ฒฝ
    map2.put("key1", 1000)
    map2["key2"] = 2000
    println("map2 : $map2")

    // ์‚ญ์ œ
    map2.remove("key1")
    println("map2 : $map2")

    // ๋ถˆ๋ณ€ํ˜• -> ๊ฐ€๋ณ€ํ˜•
    val map100 = map1.toMutableMap()
    map100["key100"] = 1000
    println("map100 : $map100")

    // ๊ฐ€๋ณ€ํ˜• -> ๋ถˆ๋ณ€ํ˜•
    val map200 = map100.toMap()
    // ๋ถˆ๋ณ€ํ˜•์ด๋ฏ€๋กœ ์˜ค๋ฅ˜
    //map200["key100"] = 1000
}

 

 

โ–ช๏ธSet

· ๊ฐ์ฒด์˜ ์ด๋ฆ„์ด๋‚˜ ์ˆœ์„œ ๋“ฑ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์—†๋Š” ์ปฌ๋ ‰์…˜์ด๋‹ค.

· ์ค‘๋ณต๋œ ๊ฐ์ฒด๋ฅผ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

fun main() {
    val set1 = setOf(1, 5, 10, 1, 5, 10)
    println("set1 : $set1")

    val set2 = mutableSetOf<Int>()
    println("set2 : $set2")

    // for๋ฌธ์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•จ
    for(item in set1) {
        println("$item")
    }

    // ํฌ๊ธฐ
    println("set1 : ${set1.size}")

    // ์ถ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ™์€ ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Œ
    set2.add(10)
    set2.add(20)
    set2.addAll(listOf(30, 40, 50, 1, 5, 10))
    println("set2 : $set2")

    // ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ๋งŒ ์‚ญ์ œ
    set2.remove(5)
    println("set2 : $set2")
    
    // ๋ถˆ๋ณ€ํ˜• -> ๊ฐ€๋ณ€ํ˜•, ๊ฐ€๋ณ€ํ˜• -> ๋ถˆ๋ณ€ํ˜• ๋ณ€๊ฒฝ์€ List์™€ Map์ด๋ž‘ ๋˜‘๊ฐ™์Œ
    // Set์€ List๋กœ, List๋Š” Set์œผ๋กœ ์„œ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
}