자료 구조란?
컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.
종류는 List, Set, Map, Stack, Queue 등이 있으며
그중 List, Set, Map 읽기 전용인 immutable과 수정이 가능한 mutable로도 구별된다.
List
순서를 가지고 일렬로 나열한 원소들의 모임을 정의한다. 중복을 허용한다.
val list1 = listOf("Kotlin", "Java", "Kotlin")
// 람다식으로 결과를 출력하였다. 람다식은 나중에 다룰 예정이다.
list1.forEach{
i -> println("$i")
}
List, Set, Map은 mutable로 시작하면 수정이 가능하다.
val list2 = mutableListOf("Honshu", "Java", "Kotlin")
println(list2[0]) // Honshu가 출력
list2[0] = "Kyushu" // Kyushu로 변경됨
println(list2[0]) // Kyushu가 출력
Set
List와 달리 순서를 가지지 않으며 중복된 값이 있으면 하나로 출력한다.
val set1 = setOf(1,1,2,2,3,3,3,4,5,5)
println(set1) // [1, 2, 3, 4, 5]
Set에서 데이터를 추가, 삭제하는 방법은 아래와 같다.
val set2 = mutableSetOf(1,1,2,2,3,3,3,4,5,5) // mutableSetof 선언
println(set2)
set2.add(6) // 6 추가
println(set2) // [1, 2, 3, 4, 5, 6] 출력
set2.remove(2) // 2 제거
println(set2) // [1, 3, 4, 5, 6] 출력
Map
Key-Value로 구성되어 있으며 키의 중복을 허용하지 않는다. (값은 중복 허용된다.) "Key" to "Value" 구조를 가진다.
val map2 = mutableMapOf("name" to "krille", "age" to 22, "height" to 22)
println(map2) // {name=krille, age=22, height=22} 출력
Map의 값 변경 방법은 두 가지가 있다. 첫 번째는 바로 값을 수정하는 방식, 두 번째는 replace() 함수를 사용하는 것이다.
map2["age"] = 23
println(map2["age"]) // 23
map2.replace("age", 24)
println(map2["age"]) // 24
Set처럼 Value도 값을 추가하거나 삭제할 수 있다.
// 추가
map2.put("hobby", "game")
println(map2["hobby"]) // {name=krille, age=24, height=22, hobby=game}
// 제거
map2.remove("height")
println(map2) // {name=krille, age=24, hobby=game}
Stack
후입선출 구조로 나중에 입력된 값이 먼저 출력된다. LIFO(Late In First Out) 구조를 가진다.
데이터를 입력할 땐 push, 제거할 땐 pop이라고 부른다.
val stack = ArrayDeque<Int>()
stack.addLast(10) // push
stack.addLast(20)
stack.addLast(30)
println(stack) // [10, 20, 30]
stack.removeLast() // pop
stack.removeLast()
println(stack) // [10]
Queue
선착순 구조로 먼저 입력된 값이 먼저 출력된다. FIFO(First In First Out) 구조를 가진다.
입력은 enqueue, 출력은 dequeue라고 부른다.
val queue = ArrayDeque<Int>()
queue.addLast(1) // enqueue
queue.addLast(2)
queue.addLast(3)
println(queue) // [1, 2, 3]
queue.removeFirst() // dequeue
queue.removeFirst()
println(queue) // [3]
'코틀린' 카테고리의 다른 글
12. 클래스 - 기본 (1) | 2025.01.29 |
---|---|
11. 객체 지향 프로그래밍 (0) | 2025.01.29 |
09. 함수 (1) | 2025.01.29 |
08. String Template (0) | 2025.01.29 |
07. 제어문 - 조건문 - when (0) | 2025.01.29 |