배열(Array)
- 하나의 변수에 여러 개의 값을 저장할 수 있다.
- 값을 담기 전에 먼저 배열 공간의 개수를 할당하거나 초기화 시에 데이터를 저장해두면 데이터의 개수만큼 배
열의 크기가 결정된다.
- 먼저 개수를 정해놓고 사용해야 하며 중간에 개수를 추가하거나 제거할 수 없다.
사용법 : var 변수명 = Array(개수)
1. 배열객체는 기본 타입 뒤에 Array를 붙여서 만든다.
ex) var students = IntArray(10) / LongArray(10) / DoubleArray(10) / CharArray(10) / FloatArray(10) / DoubleArray(10)
2. 이후 배열의 공간에 값을 입력한다.
· 배열명[인덱스] = 값 ex) students[0] = 10
· 배열명.set(인덱스, 값) ex) students.set(1, 20)
↑위처럼 각 공간에 값을 입력하는 방법은 2가지이다.(코드는 동일하나 표현만 다를뿐!)
arrayOf() 함수를 사용해서 값을 직접 할당할 수도 있다. ex) var studentsNumber = arrayOf(10, 20, 30, 40, 50)
· 문자배열에 빈 공간 할당하기
- String은 기본 타입이 아니기 때문에 StringArray는 없다.
- 대신 var stringArray = Array(10, {item -> ""}) 로 선언 가능
※ 배열의 범위를 벗어난 인덱스에 값을 할당할 경우


java.lang.ArrayIndexOutOfBoundsException 이라는 에러 메시지가 출력된다.
3. 배열의 값 꺼내기
· 배열명[인덱스] ex) var seventhValue = students[6]
· 배열명.get(인덱스) ex) var tenthValue = students.get(9)
컬렉션(Collection)
- 배열과 같이 여러 개의 값을 넣을 수 있는 자료형이다.
- 하지만 공간의 크기를 처음 크기로 고정하지 않고 임의의 개수를 담을 수 있다는 점이 배열과 다르다.
→ (동적배열)
- Kotlin에서 동적으로 리스트를 사용하기 위해서는 리스트 자료형 앞에 Mutable이라는 접두어가 붙는다.
ex) MutableList, MutableMap, MutableSet
종류 : List, Map, Set
1. List
- 저장되는 데이터에 인덱스를 부여한 컬렉션이며 중복된 값을 입력할 수 있다.
- Array와 같이 '데이터타입Of' 로 사용
var vehicle = mutableListOf("자동차", "비행기", "보트", "바이크")
var array2 = ArrayListOf<Int>()
리스트에 값 추가하기(add)
- mutableList 변수에 add함수를 사용해서 값을 추가한다.
dayMutableList.add("THU")
- 값이 추가되면서 동적으로 리스트의 공간이 자동으로 증가한다.
- Index를 지정해주지 않아도 입력되는 순서대로 Index가 지정된다.
리스트에 입력된 값 사용하기(get)
-입력할 때는 인덱스를 지정하여 몇 번째 값을 꺼낼 것인지 명시해야한다.
today = dayMutableList.get(3)
리스트값 수정하기(set)
- set 함수를 사용해서 특정 인덱스의 값을 수정할 수 있다.
mutableList.set(1, "Water") //1번 인덱스의 값을 Water로 수정한다는 뜻!
리스트에 입력된 값 제거하기(removeAt)
- removeAt 함수로 리스트에 입력된 값의 인덱스를 지정해서 삭제할 수 있다.
mutableList.removeAt(1)
/* 리스트의 1번 인덱스의 값을 삭제한다는 의미!
>>>> 1번 인덱스를 삭제함으로써 2번 인덱스부터 인덱스부터는 빈자리의 인덱스로 이동하게 된다.
>>>> 즉 [2]→[1], [3] →[2], [4] →[3]으로 변하게 된다. */
빈 리스트 사용하기
- 아무것도 없는 빈 리스트를 생성할 경우 입력되는 값의 데이터 타입을 알 수 없기 때문에 값의 타입을 추론할 수 없다.
- 때문에 제네릭<>을 사용해서 데이터 타입을 직접 명시해주어야 한다.
var nameOfStudents = mutableListOf<String>()
컬렉션 개수 가져오기(size)
- size 프로퍼티를 사용해서 컬렉션의 개수를 가져올 수 있다.
nameOfStudents.size
2. Set
- 중복을 허용하지 않는 리스트이다.
- 리스트와 유사한 구조이지만 인덱스로 조회할 수 없으며 get 함수를 지원하지 않는다.
var set = mutableSetOf<String>()
Set 값 입력하기 & 사용하기
- add 함수를 통해서 값을 입력하고, 인덱스로 조회가 불가능하기 때문에 set의 모든 데이터를 출력해서 사용한다.
fun main() {
var setOfName = mutableSetOf<String>()
setOfName.add("평화")
setOfName.add("진수")
setOfName.add("나영")
setOfName.add("평화") // Set은 중복을 허용하지 않기 때문에 이 코드는 결과값에 반영이 안된다.
print("이름 set 전체 출력 = ${setOfName}")
}

Set 삭제하기(remove)
- remove함수로 직접 값을 조회해서 삭제할 수 있다.
setOfName.remove("평화")
println("이름 set 전체 출력 = ${setOfName}")
3. Map
- Key와 Value의 쌍으로 입력되는 Collection
- Map에서의 Key는 List의 Index와 비슷하지만 직접 입력해야 한다는 점에서 차이가 있다.
- Generic으로 Key와 Value의 값의 데이터 타입을 지정해서 생성한다. ex) var map = mutableMapOf<String, String>()
빈 Map으로 생성하고 값 추가하기(put)
fun maptest(){
var costOfSubway = mutableMapOf<String, String>()
costOfSubway.put("성인", "1250원")
costOfSubway.put("학생", "1000원")
costOfSubway.put("어린이", "800원")
costOfSubway.put("65세 이상", "무료")
}
Map 사용하기(get)
- get()함수에 Key를 입력하여 값을 꺼낼 수 있음
fun mapTest(){
val sc = Scanner(System.`in`)
var costOfSubway = mutableMapOf<String, String>()
println("지하철 요금 조회!")
val name = sc.nextLine()
costOfSubway.put("성인", "1250원")
costOfSubway.put("학생", "1000원")
costOfSubway.put("어린이", "800원")
costOfSubway.put("65세 이상", "무료")
when(name) {
"성인" -> {
println(costOfSubway.get("성인"))
}
"학생" -> {
println(costOfSubway.get("학생"))
}
"어린이" -> {
println(costOfSubway.get("어린이"))
}
"65세 이상" -> {
println(costOfSubway.get("65세 이상"))
}
}
}
Map 수정하기
- put함수에 Key값을 입력했을 때, 그 Key값이 존재하고 있다면 Key값은 그대로 유지된 채 값만 수정된다.
costOfSubway.put("성인", "1250원")
costOfSubway.put("학생", "1000원")
costOfSubway.put("어린이", "800원")
costOfSubway.put("65세 이상", "무료")
costOfSubway.put("성인", "1400원")
위 코드에서 최종적으로 "성인" Key의 Value는 "1400원"이다!
Map 삭제하기(remove)
- remove 함수에 Key를 입력해서 값을 삭제할 수 있다.
- 리스트와는 다르게 인덱스에 해당하는 Key의 값은 변하지 않고 그대로 유지된다.
(리스트는 인덱스는 유지되고 값들이 한 칸씩 당겨진다.)
costOfSubway.remove("어린이")
Immutable Collection
- 코틀린은 일반 배열처럼 크기와 값을 변경할 수 없는 Immutable Collection을 지원한다
- 기존 컬렉션에서 mutable이라는 접두어만 제거된 형태로 사용한다. ex) var list = listOf("1","2")
- 한 번 입력된 값은 변경이 불가능하기 때문에 add, set 함수를 지원하지 않는다.
- 이뮤터블 컬렉션은 상수로 선언하고 상수명을 대문자로 표시하는게 좋다. Set과 Map도 마찬가지!
val IMMUTABLE_LIST = listOf("JAN", "FEB", "MAR")
Log.d("Immutable Collection", IMMUTABLE_LIST.get(1))'차근차근 코틀린' 카테고리의 다른 글
| 차근차근 코틀린(7) - 설계 (0) | 2020.09.08 |
|---|---|
| 차근차근 Kotlin(5) - 함수 (0) | 2020.09.06 |
| 차근차근 Kotlin(4) - 반복문 for, while (0) | 2020.09.06 |
| 차근차근 Kotlin(2) - 조건문 (0) | 2020.09.03 |
| 차근차근 Kotlin(1) - 변수, Naming Convention (0) | 2020.09.03 |