[Android] 3(4). 코틀린 기본 문법(배열과 컬렉션)

3 minute read

배열과 컬렉션

반복문에 대해 학습하기 전에 반복문에서 필수적으로 다루는 데이터 타입 배열과 컬렉션을 알아야 합니다.


1. 배열


배열의 특징은 다음과 같습니다.

  • 같은 자료형의 데이터들을 여러 개 저장할 수 있다.
  • 값을 저장하기 전에 먼저 배열 공간의 개수를 할당해야 한다.
  • 공간의 개수를 정한 후에는 중간에 개수를 추가하거나 제거할 수 없다.


배열 선언하기

var students = IntArray(10)
var longArray = LongArray(10)
var CharArray = CharArray(10)
var FloatArray = FloatArray(10)
var DoubleArray = DoubleArray(10)

다른 대부분의 언어들과 마찬가지로 코틀린에서도 배열의 인덱스는 0부터 시작합니다.


문자 배열에 빈 공간 할당하기

String은 기본 타입이 아니기 때문에 StringArray는 없지만 다음과 같이 사용할 수 있습니다.

var stringArray = Array(10,{item->""})


값으로 배열 공간 할당하기

arrayOf 함수를 사용해서 배열 선언과 동시에 초기화할 수 있습니다.

var dayArray = arrayOf("MON","TUE","WED","THU","FRI","SAT","SUN")


배열에 값 입력하기

배열의 인덱스에 있는 값을 바꾸는 데는 두 가지 방법이 있습니다. 다음 두 방법은 표현식만 다를 뿐 동일한 코드입니다.

  1. 인덱스 참조

    배열명[인덱스] = 
    
  2. set 함수 사용하기

    ```kotlin 배열명.set(인덱스, 값)


배열에 있는 값 꺼내기

값을 입력할 때와 같은 방식으로 인덱스로 값을 가져올 수 있습니다.

  1. 인덱스 참조

    배열명[인덱스]
    
  2. get 함수 사용하기

    배열명.get(인덱스)
    



2. 컬렉션


여러 개의 값을 넣을 수 있는 자료형에는 배열 외에도 컬렉션이 있습니다. 컬렉션은 다른 이름으로 동적 배열이라고도 하는데, 이는 배열과는 다르게 중간에 공간의 개수를 바꿀 수 있기 때문입니다.

컬렉션은 크게 리스트, 맵, 셋이 있으며, 코틀린에서 동적으로 리스트를 사용하기 위해서는 리스트 자료형 앞에 뮤터블mutable 이라는 접두어가 붙습니다. 접두어가 없는 컬렉션도 있지만 잘 사용하지 않기 때문에 항상 mutableList, mutableMap, mutableSet을 사용한다고 알고 있으면 됩니다.


리스트(List)

  • 리스트의 특징
    • 순서가 있는 컬렉션
    • 중복된 값을 입력할 수 있음
  • 리스트 사용하기

    • 리스트 생성하기: mutableListOf

      var list = mutableListOf("MON","TUE","WED")
      
    • 리스트에 값 추가하기: add

      mutableList.add("THU")
      

      add 함수로 리스트에 원소를 추가하게 되면 원소는 리스트의 맨 뒤에 추가되며, 리스트의 크기는 자동으로 증가합니다.


    • 리스트에 입력된 값 사용하기: get

      var variable = mutableList.get(1)
      
    • 리스트 값 수정하기: set

      mutableList.set(1,"수정할 값")
      
    • 리스트에 입력된 값 제거하기: removeAt

      mutableList.removeAt(1)
      

      두번째 값을 삭제하면 세번째 값부터 인덱스가 하나씩 감소하면서 빈자리의 인덱스로 이동합니다.


    • 빈 리스트 사용하기

      아무것도 없는 빈 리스트를 생성하면 입력되는 값의 데이터 타입을 알 수 없기 때문에 앞에서처럼 ‘데이터 타입Of’ 만으로는 생성되지 않고 데이터 타입을 직접적으로 알려주는 방법을 사용해야 합니다.

      ```kotlin var stringList = mutableListOf() // var 변수명 = mutableListOf<컬렉션에 입력될="" 값의="" 타입="">()

    • 컬렉션 개수 가져오기: size

      size는 함수(메서드)가 아닌 변수(프로퍼티, 속성)입니다.

      ```kotlin mutableList.size



셋(Set)

  • 셋의 특징

    • 순서가 없음.
    • 중복된 원소 저장 불가.
    • 따라서 리스트 조회가 불가능하고, set이나 get 함수도 지원하지 않음.
  • 셋 사용하기

    • 빈 셋 사용하기

      ```kotlin var set = mutableSetOf()

    • 셋에 값 추가하기: add

      set도 마찬가지로 원소를 추가할 때는 add 함수를 사용합니다.

      set.add("JAN")
      set.add("FEB")
      set.add("MAR")
      set.add("JAN")
      

      set은 중복을 허용하지 않기 때문에 마지막에 입력한 “JAN”은 셋에 추가되지 않습니다.


    • 셋 삭제하기: remove

      셋은 값이 중복되지 않기 때문에 값으로 직접 조회해서 삭제할 수 있습니다.

      ```kotlin set.remove(“FEB”)



맵(Map)

  • 맵의 특징

    • ‘키’‘값’의 쌍으로 입력되는 컬렉션
    • 맵의 키는 리스트의 인덱스와 비슷한데, 맵에서는 키를 직접 입력해야 함.
    • 동일한 ‘키’는 입력할 수 없지만, 동일한 ‘값’은 입력 가능
  • 맵 사용하기

    • 빈 맵 사용하기

      ```kotlin var map = mutableMapOf<String,String>()

    • 맵에 값 추가하기: put

      ```kotlin map.put(“키1”,”값1”)

    • 맵에 입력된 값 사용하기: get

      ```kotlin map.get(“키1”)

    • 맵 수정하기

      ```kotlin map.put(“키1”, “수정”)

    • 맵 삭제하기: remove

      map.remove("키1")
      

      맵에서는 키를 입력해서 값을 삭제합니다. 리스트와는 다르게 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지됩니다.



3. 이뮤터블 컬렉션


코틀린은 일반 배열처럼 크기를 변경할 수 없으면서 값 또한 변경할 수 없는 ‘이뮤터블 컬렉션’을 제공합니다.

이뮤터블 컬렉션은 기존 컬렉션에서 mutable이라는 접두어가 제거된 형태로 사용됩니다.

var list = listOf("1","2")

불변형 컬렉션은 한 번 입력된 값을 ‘사용’만 할 수 있습니다. 즉 수정, 추가, 제거 모두 안됩니다.


이뮤터블 컬렉션을 저장할 때는 val로 선언하고 변수명을 대문자로 표시하는 것이 좋습니다. 셋과 맵도 동일하게 사용합니다.

val DAY_LIST = listOf("월", "화". "수". "목". "금", "토". "일")

이뮤터블 컬렉션은 ‘요일 데이터’처럼 기준이 되는 어떤 값의 모음을 하나의 변수에 저장할 필요가 있거나 또는 여러 개의 값을 중간에 수정하지 않고 사용할 필요가 있을 때 사용합니다.



정리


  • 배열(Array): 하나의 변수에 여러 개의 정해진 값을 담을 수 있게 해주는 데이터 타입. 크기의 변경은 불가능하지만 값의 변경은 가능하다.
  • 컬렉션(Collection): 여러 개의 값을 담을 수 있는 배열은 값의 개수가 증가하면 사용할 수 없는 단점이 있기 때문에 동적으로 크기를 변경할 수 있도록 만들어진 동적 배열. 동적 배열에는 크게 리스트(List), 셋(Set), 맵(Map) 3가지의 데이터 타입이 있다.
  • 뮤터블(Mutable): 입력된 값을 변경할 수 있는 특성. 대표적으로 var로 선언된 변수는 모두 뮤터블이다.
  • 리스트(List): 컬렉션의 한 종류로 인덱스를 사용하는 데이터 타입. 인덱스가 있기 때문에 중복된 값을 넣을 수 있다.
  • 셋(Set): 리스트에서 인덱스가 빠진 데이터 타입. 값을 중복해서 넣을 수 없다.
  • 맵(Map): 키(Key)와 값(value)을 쌍으로 갖는 데이터 타입. 맵의 키는 리스트의 인덱스처럼 사용할 수 있다. 값의 중복은 가능하지만 키의 중복은 불가능하다.

Categories:

Updated:

Leave a comment