안드로이드/정리(Android)

코틀린 문법 공부

김염인 2022. 3. 18. 12:11

여러 기업들이 코틀린을 이용해 코딩테스트를 요구하는 경우가 많다.

따라서 코딩테스트를 공부하기 코틀린 문법을 정리를 천천히 해보려고 한다~!


코틀린의 Collection type

코틀린에서는 3 종류의 Collection type이 있다.

  • List
  • Set
  • Map

List

인덱스로 접근 가능한 순서가 있는 collection이다.

요소들은 중복으로 들어갈 수 있다.

파이썬의 Tuple과 비슷하다. (뒤에 나오는 MutableList는 파이썬의 List와 비슷하다)

Set

유일한 elements의 collection이다.

즉, List처럼 요소가 반복적으로 등장할 수 없다. (요소 중복 불가)

일반적으로, Set의 요소들의 순서가 중요하지 않다.

파이썬의 Set과 비슷하다.

Map(or dictionary)

key-value(키-값) 쌍이다.

키는 유일하며 각 키들이 정확히 하나의 값과 매핑된다.

키는 유일하지만 값들은 중복이 될 수 있다.

파이썬의 Dict와 비슷하다.

 

예를 들어 키가 "one" 일 때 값이 "1", 키가 "하나" 일 때도 값이 "1"이 될 수 있지만

키가 "2"일 때 값이 "two", 키가 "2"일 때 값이 "둘" 이면 키가 중복이기 때문에 불가능하다.

 

코틀린 Collection interfaces의 2가지 종류

코틀린의 Collections는 Mutable 타입과, Immutable 타입 중 하나이다.

(코틀린 공식 Doc에서는 Immutable 타입을 read-only 라고 표현하는 듯 하다)

코틀린 collections의 인터페이스 관계도

 

사용 방법

mutableList

코틀린

    val testList = mutableListOf("a","b","c")
    println(testList) // [a, b, c]
    testList.add("d")
    println(testList) // [a, b, c, d]
    testList.remove("a")
    println(testList) // [b, c, d]

    val findindex = testList.indexOf("c")
    println(findindex) // 1 C 의 index 위치를 찾음

    val testIterator = testList.listIterator()
    println(testList) // [b, c, d] 현재 배열 상태
    println(testIterator.next()) // b
    println(testIterator.next()) // c
    println(testIterator.hasNext()) // true
    println(testIterator.next()) // d
    println(testIterator.hasNext()) // false
    println(testIterator.previous()) // d
    println(testIterator.previous()) // c
    println(testIterator.previous()) // b

    // 활용하기
    println("HasNext 실습")
    while (testIterator.hasNext()){
        println(testIterator.next()) // b c d
    }

 

Set

코틀린

    val numbers = mutableSetOf(1, 2, 3, 4)

    println("Number of elements: ${numbers.size}")
    // Number of elements: 4

    if (numbers.contains(1)) println("1 is in the set")
    // 1 is in the set

    val numbersBackwards = setOf(4, 3, 2, 1)

    println("The sets are equal: ${numbers == numbersBackwards}")
    // The sets are equal: true

 

Map

코틀린

    val testMap = mutableMapOf<Int, String>()
    testMap.put(1, "짱구")
    testMap.put(2, "철수")
    testMap.put(3, "맹구")
    println(testMap) // {1=짱구, 2=철수, 3=맹구}
    println(testMap.get(1)) // 짱구

    // 실습하기
    val mutableListtest = mutableListOf<String>("sunglass", "hat", "shoes", "clothes", "sunglass" , "hat")
    val testMap2 = mutableMapOf<String, MutableList<String>>()
    for(i in mutableListtest){
        if(i in testMap2){
            testMap2[i]!!.add("hi")
        }
        else{
            testMap2[i] = mutableListOf<String>("hello")
        }
    }

    println(testMap2)  // {sunglass=[hello, hi], hat=[hello, hi], shoes=[hello], clothes=[hello]}