안드로이드 배열, 컬렉션

배열

코틀린으로 기본타입 배열 선언법

var 변수 = Array(개수)

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

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

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

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

값으로 배열 공간 할당하기

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

배열에 값 입력하기

배열명[인덱스] = 값

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

배열에 있는 값 꺼내기

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

컬렉션

코틀린은 컬렉션 데이터 타입을 설계할 때 모두 이뮤터블로 설계했다고 한다. 그래서 기본 컬렉션인 리스트, 맵, 셋은 모두 한 번 입력된 값을 바꿀 수 없다. 그래서 컬렉션의 원래 용도인 동적 배열로 사용하기 위해서는 뮤터블로 만들어진 데이터 타입을 사용해야 한다. (mutableListOf, mutableMapOf, mutableSetOf)

리스트에 값 추가하기

mutableList.add("THU")

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

var variable = mutableList.get(1)

리스트 값 수정하기

mutableList.set(1, "수정할 값")

리스트에 입력된 값 제거하기

mutableList.removeAt(1)

이렇게 두 번째 값을 삭제하면 세 번째 값부터 인덱스가 하나씩 감소하면서 빈자리의 인덱스로 이동한다. 빈 공간을 뒤에서부터 밀어서 채운다는 뜻.

빈 리스트 사용하기

빈 컬렉션의 경우 '데이터 타입Of' 만으로는 생성되지 않고 데이터 타입을 직접적으로 알려주는 방법을 사용해야 한다.

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

컬렉션의 개수 가져오기

mutableList.size

앞에서 set, get 등은 함수라고 하고, size는 '프로퍼티' 라는 용어를 사요헀는데 이 둘을 구분하는 방법은 괄호의 유무이다. 괄호가 없으면 프로퍼티라고 알고 있으면 된다.

셋 사용하기

셋(Set) 컬렉션은 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 직접 사용할 수 없다. 셋에 있는 모든 값을 출력해볼 수는 있다.

Log.d("Collection", "Set 전체 출력 = ${set}")

셋 삭제하기

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

set.remove("FEB")

맵 생성하기

다음은 키와 값의 타입을 모두 String으로 사용하기 위한 생성예제다.

var map = mutableMapOf<String, String>()

빈 맵으로 생성하고 값 추가하기

var map = mutableMapOf<String, String>()

map.put("키1","값1")
map.put("키2","값2")
map.put("키3","값3")

맵 사용하기

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

맵 수정하기

put 함수를 사용할 때 동일한 키를 가진 값이 있으면 키는 유지된 채로 그 값만 수정된다.

map.put("키2", "수정")

맵 삭제하기

remove 함수에 키를 입력해서 값을 삭제할 수 있다. 리스트와는 다르게 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지된다. (값2를 지운다고해서 값3이 리스트처럼 한칸 밀려 올라오는게 아니라, "키3"이 "값3"의 값을 여전히 기억하고 있다는 뜻)

map.remove("키2")

컬렉션의 값은 '엘리먼트' 라고 한다. 그냥 값이라고 부르면 맵을 지칭할 때 맵의 값(엘리먼트 자체)을 가리키는 건지 엘리먼트의 값(실제 값)을 가리키는 건지 모호하기 때문이다.

리스트 엘리먼트 = 리스트의 (값)
맵 엘리먼트 = 맵의 (키와 값)

불변형 컬렉션

mutable 이 붙지 않고 그냥 list, map, set 만 쓰면 불변형 컬렉션이다.

불변형 컬렉션은 한 번 입력된 값을 변경할 수 없기 때문에 add나 set 함수는 지원하지 않고 최초 입력된 값을 '사용'만 할 수 있다. 수정,추가,제거 모두 안 된다.

val IMMUTABLE_LIST = listOf("JAN", "FEB", "MAR")

대표적으로 요일 데이터를 저장할 때 사용한다.

불변형(이뮤터블) 컬렉션을 저장할 때는 val 로 선언하고 변수명을 대문자로 표시하는 게 좋다.

좋은 웹페이지 즐겨찾기