[Kotlin] 배열 Array, 컬렉션 Collection

Yeon·2023년 7월 7일
0

Android

목록 보기
5/9
post-thumbnail

Array

  • 하나의 변수에 여러 개의 정해진 값을 담을 수 있게 해주는 데이터 타입
  • 처음 정해진 값의 개수는 바꿀 수 없음
  • 배열 객체는 Int, Long, Char 등과 같은 타입 뒤에 Array를 붙여서 만듦
var 변수 = Array(개수)

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

문자 배열에 빈 공간 할당

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

값으로 배열 공간 할당

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

배열에 값 입력

배열명[인덱스] = 값
배열명.set(인덱스, 값)

students[0] = 90
students.set(1, 91)
...
students.set(8, 98)
students[9] = 99

배열에 있는 값 꺼내기

배열명[인덱스]
배열명.get(인덱스)

var seventhValue = intArray[6]
var tenthValue = intArray.get(9)

Collection

  • 여러 개의 값을 담을 수 있는 배열은 값의 개수가 증가하면 사용할 수 없는 단점이 있기 때문에 동적으로 크기를 변경할 수 있도록 만들어진 동적 배열
  • 동적 배열에는 크게 List, Set, Map 세 가지의 데이터 타입이 있음

List

  • Collection의 한 종류로 인덱스를 사용하는 데이터 타입
  • 인덱스가 있기 때문에 중복된 값을 넣을 수도 있음

리스트 생성 mutableListOf

  • 아래와 같이 작성하면 변수에 "A", "B", "C" 3개의 값을 가진 크기가 3인 동적 배열 리스트가 생성됨
var mutableList = mutableListOf("A", "B", "C")

리스트에 값 추가 add

  • add 함수로 값을 추가
  • 값이 추가되면서 동적으로 리스트의 공간이 자동으로 증가
mutableList.add("D")
  • "A": [0], "B": [1], "C": [2] → "A": [0], "B": [1], "C": [2], "D":[3]

리스트에 입력된 값 사용 get

  • get 함수로 리스트에서 값을 꺼냄
  • add 함수와는 다르게 사용할 때 인덱스를 지정하여 몇 번째 값을 꺼낼 것인지 입력해야 함
var variable = mutableList.get(1)

리스트 값 수정하기 set

  • set 함수로 특정 인덱스의 값을 수정
mutableList.set(1, "F")

리스트에 입력된 값 제거 removeAt

  • removeAt 함수로 리스트에 입력된 값의 인덱스를 지정해서 삭제
mutableList.removeAt(1)
  • 두 번째 값을 삭제하면 세 번째 값부터 인덱스가 하나씩 감소하면서 빈자리의 인덱스로 이동
  • "A": [0], "B": [1], "C": [2] → "A": [0], "C": [1]

빈 리스트 사용

  • 빈 리스트는 앞으로 입력되는 값의 데이터 타입을 알 수 없기 때문에 값의 타입도 추론할 수 없음
  • 빈 컬렉션의 경우 데이터 타입을 직접적으로 알려주는 방법을 사용해야 함
var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>()

var stringList = mutableListOf<String>()

컬렉션 개수 가져오기 size

  • size 프로퍼티를 사용하면 컬렉션의 개수를 가져올
    수 있음
  • mutableList.size

Set

  • 리스트에서 인덱스가 빠진 데이터 타입
  • 인덱스로 조회x, get 함수 지원x
  • 값을 중복해서 넣을 수 없음
var set = mutableListOf<String>()

빈 셋으로 초기화하고 값 입력

var set = mutableSetOf<String>()
set.add("green")
set.add("pink")
set.add("purple")
set.add("pink")    // 동일한 값은 입력x

셋의 값 인덱싱

  • set은 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 사용할 수 없음

셋의 값 삭제

  • set은 값이 중복되지 않고, 인덱스로 불러올 수 없기 때문에 값을 직접 삭제해야 함
set.remove("purple")

Map

  • Key와 Value를 쌍으로 갖는 데이터 타입
  • Map의 Key는 리스트의 인덱스와 비슷하지만 Map에서는 Key를 직접 입력해야 함
  • 인덱스에 해당하는 키를 지접 지정해서 사용해야 함
var map = mutableMapOf<String, String>()

빈 맵으로 생성하고 값 추가: put(key, value)

  • key와 value를 추가할 때마다 리스트처럼 맵의 공간이 늘어남
var map = mutableMapOf<String, String>()
map,put("key1", "value1")
map,put("key2", "value3")
map,put("key3", "value3")

맵 사용: get()

Log.d("CollectionMap", "map에 입력된 key1의 값은 ${map.get("key1")}")

// [로그캣 출력 내용]
// map에 입력된 key1의 값은 value2.

맵 수정: put(key, value)

  • put 함수를 사용할 때 동일한 key를 가진 값이 있으면 key는 유지된 채로 그 value만 수정
map.put("key2", "수정")

맵 삭제: remove(key)

  • 리스트와는 달리 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지됨
map.remove("key2")
  • {(key1: value1), (key2: 수정), (key3: value3)} → {(key1: value1), (key3: value3)}

함수와 프로퍼티 구분 방법: 괄호의 유무

  • 함수: 괄호O
  • 프로퍼티: 괄호x

Collection 값의 단위 = Element

0개의 댓글