반응형
코틀린에는 배열의 종류가 4가지가 있다.
array, list, set, map 네가지를 비교해보자
1. Array
// Array 선언
var arr = arrayOf("A", "B", "C", "D")
println(arr[0] + " " + arr[1])
arr[0] = "AAA"
println(arr[0] + " " + arr[1])
// A B
// AAA B
- 특징
- Array 선언시 배열의 크기를 지정해야 한다.
- 지정된 배열의 크기는 변경 불가하다.
(python의 list.append(), C#의 list.ㅁdd() 사용 불가)
- 지정된 배열의 크기는 변경 불가하다.
- 배열 안의 값을 자유롭게 변경이 가능하다.
- arr[0] = "AAA"처럼 인덱스값으로 내용 수정 가능
- 순서를 저장한다.
- 중복값을 허용한다.
- Array 선언시 배열의 크기를 지정해야 한다.
2. List
// Immutable List
var imList = listOf<String>("mL-1", "mL-2", "mL-3")
for (a in imList) { println(a)}
// 읽기 전용(immutable)인 리스트의 값을 변경을 시도하기에 에러 발생
// imList[0] = "mL-4"
println("---------------")
for (a in imList) { println(a)}
println("---------------")
// error
// Mutable List
var mList = mutableListOf<String>("mL-1", "mL-2", "mL-3")
for (a in mList) { println(a)}
// mutable 리스트기에 값 변경 가능
mList[0] = "ML-4" // mList.set(0, "mL-4")도 같은 기능
// 리스트 값 추가
mList.add("mL-5")
println("---------------")
for (a in mList) { println(a)}
println("---------------")
// mL-1
// mL-2
// mL-3
// ---------------
// mL-4
// mL-2
// mL-3
// mL-5
// ---------------
- 특징
- List는 순서를 저장한다.
- 중복값을 허용한다.
- List는 두가지 mutable, immutable 두가지로 나뉜다.
- immutable
- 기본 값, 읽기전용 (수정 불가)
- mutable
- 값 수정 가능
- 인덱스에 직접 접근하여 값 변경 가능
- 배열 추가/삭제 가능 (add/remove)
- immutable
- List의 단점
- 메모리에 순서대로 할당되지 않는다.
- 검색기능 활용시 성능저하가 발생한다.
(메모리 순서대로 검색이 아니라 각 데이터가 있는 메모리 주소를 찾아들어가 값을 확인하고 다음 주소로 이동해야 하기에 성능 저하가 발생한다)
- 검색기능 활용시 성능저하가 발생한다.
- 메모리에 순서대로 할당되지 않는다.
3. Set
// immutable Set
var imSet = setOf(1, 2, 3, 1, 2, 3)
for (a in imSet) { println(a) }
// 1
// 2
// 3
// (중복값은 허용되지 않기에 1, 2, 3 한가지씩 저장된다)
// mutable Set
var mSet = mutableSetOf(1, 2, 3, 1, 2, 3)
for (a in imSet) { println(a) }
println("---------------")
mSet.add(4)
mSet.remove(1)
for (a in imSet) { println(a) }
println("---------------")
// 1
// 2
// 3
// ---------------
// 2
// 3
// 4
// ---------------
// (중복값이 허용되지 않아 1, 2, 3만 할당)
// (mutable이기에 내용 수정 가능 add/remove)
- 특징
- List와 같이 immutable / mutable로 나뉜다.
- 순서를 저장하지 않는다.
- 중복 값을 허용하지 않는다.
4. Map
// immutable Map
var imMap = mapOf("name" to "J", "age" to "13", "country" to "korea")
println(imMap)
println(imMap["name"])
// {name=J, age=13, country=korea}
// J
// mutable Map
var mMap = mutableMapOf("트와이스" to "TT", "아이유" to "내 손을 잡아", "NCT" to "영웅")
mMap.put("QWER", "고민중독")
println("-Put <mMap.put(\"QWER\", \"고민중독\")>")
println(mMap)
mMap.remove("NCT")
println("-Remove <mMap.remove(\"NCT\")>")
println(mMap)
mMap.remove("QWER", "내 이름 맑음")
// -Put <mMap.put("QWER", "고민중독")>
// {트와이스=TT, 아이유=내 손을 잡아, NCT=영웅, QWER=고민중독}
// 영웅
// -Remove <mMap.remove("NCT")>
// {트와이스=TT, 아이유=내 손을 잡아, QWER=고민중독}
- 특징
- key : value의 쌍으로 저장되는 자료 구조
- 파이썬의 dictionary와 같은 형식
- immutable / mutable로 분리됨
- key값은 중복 불가
- value값은 중복 가능
- key : value의 쌍으로 저장되는 자료 구조
반응형
'안드로이드 앱 만들기 > 코틀린 기초' 카테고리의 다른 글
코틀린 lateinit, lazy (변수 초기값 나중에 작성하기) (6) | 2024.11.04 |
---|---|
코틀린의 static, companion (0) | 2024.11.04 |
코틀린의 Switch/Case (When 문법) (0) | 2024.11.03 |