본문 바로가기
Programming/Kotlin

[Kotlin] 코틀린 뽀개기 - 컬렉션을 이용해 자료구조 활용하기

by 코딩의성지 2019. 12. 14.

안녕~~ ㅎㅎ

 

학교다닐 때 자료구조 수업을 들은 적 있다. 자료구조 수업 정말 힘들었었던 기억이 난다 ㅜㅜ

 

코틀린에서는 다양한 자료구조를 효율적으로 제공하는 컬렉션을 제공한다.

 

자바랑 비교해봤을 때 굉장히 쉽게 제공되는 것 같다.

 

오늘 공부할 Collection은 List, Set, Map 이다. ㅎㅎ 다들 이게 뭔지 개념은 알거라고 생각하고 포스팅을 진행한다.

일단 이게 뭔지 모르겠으면 ... 구글링을 통해 공부하고 난 뒤에 이 포스팅을 보길 추천한다.

 

List

 

먼저 List다. 리스트는 순서가 있는 컬렉션이다. 배열과는 다르게 크기가 동적으로 할당된다는 특징이 있다.

List든 Set이든 Map든 그냥 만드는 것과 Mutable 하게 만드는 것이 차이가 있다.

 

그냥 만들면 추가나 삭제 등의 기능을 사용할 수 없고 가져다 쓰는 기능만 가능하다. 반면 Mutable 하게 만들면 이러한 기능이 가능하다.

 

아래 예제를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
fun main (args : Array<String>) {
    var tempList = listOf(101102103104105)
    println(tempList)
 
    print("${tempList[0]} ")
    print("${tempList[1]} ")
    print("${tempList[2]} ")
    print("${tempList[3]} ")
    print("${tempList[4]} ")
    println()
 
    print("${tempList.get(0)} ")
    print("${tempList.get(1)} ")
    print("${tempList.get(2)} ")
    print("${tempList.get(3)} ")
    print("${tempList.get(4)} ")
    println()
 
    var index103 = tempList.indexOf(103)
    println(index103)
 
    var index99 = tempList.indexOf(99)
    println(index99)
 
    var subList = tempList.subList(0,3)
    println(subList)
 
    var tempMutableList = mutableListOf<Int>()
    tempMutableList.add(100)
    tempMutableList.add(100)
    tempMutableList.add(100)
 
    tempMutableList.add(11000)
    println(tempMutableList)
 
    tempMutableList.removeAt(1)
    println(tempMutableList)
 
    tempMutableList.set(2199)
    println(tempMutableList)
 
    println(tempMutableList)
}
 
 

리스트는 listOf (추가, 수정, 삭제 불가) 나 mutableListOf (추가, 수정, 삭제 가능) 를 이용해 생성한다.  

 

일단 List에서 get() 메서드를 사용하면 파라미터에 들어간 인덱스의 객체를 반환한다.

그리고 indexOf() 메서드는 파라미터에 들어간 객체 값이 있는 인덱스를 반환한다. 만약 없다면 -1을 리턴한다.

그리고 subList() 메서드는 List의 일부분을 복사해서 새로운 리스트를 생성한다.

 

그리고 MutableList는 객체의 수정이 가능하다. 아래의 기능이 주로 쓰인다.

먼저 add() 는 객체를 추가하는 기능이다. 

removeAt() 은 원하는 인덱스의 위치에 있는 객체를 삭제한다.

set() 은 파라미터에 들어간 인덱스에 있는 객체값을 재설정할때 사용한다.

clear() 는 그냥 안에 있는 객체를 전부 날려버리고 빈 리스트로 만든다.

 

Set

 

Set 은 중복되지 않는 객체를 관리하는 컬렉션이다. Iterator라는 컬렉션을 이용해야만 객체를 가져올 수 있다.

 

아래 예제를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fun main(array: Array<String>) {
    var tempSet = setOf(100200300400 ,500)
    println(tempSet)
 
    var tempItor = tempSet.iterator()
 
    while (tempItor.hasNext()) {
        print("${tempItor.next()} ")
    }
    println()
 
    var tempMutableSet = mutableSetOf<Int>()
    tempMutableSet.add(10)
    tempMutableSet.add(20)
    tempMutableSet.add(30)
    println(tempMutableSet)
 
    println(tempMutableSet)
 
}
 
 

List와 마찬가지로 셋은 setOf (추가, 수정, 삭제 불가) 나 mutableSetOf (추가, 수정, 삭제 가능) 를 이용해 생성한다. 

 

iterator() 메서드와 while문을 활용하면 set 안에 있는 각각의 객체를 가져올 수 있다. 활용방법은 예제를 참고하자!

 

그리고 MutableSet에서 add() 로 객체 추가가 가능하고 remove() 메서드로 객체 삭제가 가능하다.

 

 

Map

 

Map은 key 와 value 의 쌍으로 객체를 관리하는 컬렉션이다. 아래 예제를 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fun main(array: Array<String>) {
    var tempMap = mapOf("key1" to 101"key2" to 102"key3" to 103)
    println(tempMap)
 
    println(tempMap.get("key1"))
    println(tempMap.get("key2"))
    println(tempMap.get("key3"))
 
    println(tempMap["key1"])
    println(tempMap["key2"])
    println(tempMap["key3"])
 
    var tempMutableMap = mutableMapOf<String, Any?>()
    tempMutableMap.put("key1"100)
    tempMutableMap.put("key2"99.9)
    tempMutableMap.put("key3""문자열")
 
    println(tempMutableMap)
    println(tempMutableMap.get("key1"))
    println(tempMutableMap.get("key2"))
    println(tempMutableMap.get("key3"))
 
    tempMutableMap.set("key3""나는바보")
    println(tempMutableMap)
 
    tempMutableMap.remove("key3")
    println(tempMutableMap)
}
 
 

역시나 마찬가지로 mapOf (추가, 수정, 삭제 불가)  나 mutableMapOf (추가, 수정, 삭제 가능) 를 이용해서 생성할 수 있다.

 

MutableMap 에서는 

put() 메서드를 이용해 map 에 키와 객체를 추가하고,

get() 메서드에 파라미터에 키 값을 넣어 객체를 가져오고,

set() 메서드를 이용해 기존 객체를 재설정하고,

remove() 메서드를 이용해 객체를 삭제할 수 있다.

 

ㅎㅎㅎ 이렇게 세가지 컬렉션을 능수능란하게 사용할 수 있다면 왠만한 데이터 관리는 잘 하실 수 있을 거다.

 

그동안 코틀린 기본에 대해 공부하느라 고생 정말 많았다. 고생한 우리를 위해 크게 박수한번 치자.

 

다음 포스팅 부터는 코틀린을 이용해서 안드로이드 개발 공부를 해볼거다. ㅎㅎ 다음 포스팅도 기대해주라!!

 

그럼 즐거운 코딩하자 !!

반응형

댓글