Kotlin

[android : kotlin] 코틀린 Collection 함수 예제 및 총정리( List, Map, Set 예제 코드)

코틀린 Collection 함수

Collection 함수에 대해 알아 보자. “데이터를 저장하기 위해 사용한다” 라고 생각하면 쉽다. 크게 List, Map, Set으로 나눌 수 있다. List는 기본적으로 변경이 불가능한(Immutable) 방식이다. 읽기 전용(read-only)이다. Set 역시 변경이 불가능한 방식이며, 읽기 전용이다. setOf() 메서드를 사용하여 생성한다. Map은 키(key) 와 값(value)으로 이루어진 쌍의 데이터를 관리하기 위해 사용한다. 키(key)는 중복될 수 없다. Map 역시 변경이 불가능한 방식이며, 읽기 전용이다. mapOf()메서드를 사용하여 생성할 수 있다.

컬렉션 타입 (Collection types)

■ List 예제를 살펴보자

fun main() { 
    val list5 : List<Int> =  listOf(1,2,3,4,5,4,3,1)
    println(list5)
    println("list5 사이즈 : ${list5.size}")

    for(i in 0 until list5.size) {
    	println("list5[${i}]=${list5[i]}")
    }
}

[실행결과]

[1, 2, 3, 4, 5, 4, 3, 1]
list5 사이즈 : 8
list5[0]=1
list5[1]=2
list5[2]=3
list5[3]=4
list5[4]=5
list5[5]=4
list5[6]=3
list5[7]=1

리스트의 합을 구하는 예제이다. sum()메서드를 이용하였다. 

fun main() {

    var list0 = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).map { it * 2 }.sum()
    var list2 = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).sum()
    
    println(list0)
    println(list2)
    
}

[실행결과]

110
55

다음 예제는 람다식을 사용하여 리스트의 값을 1부터 10으로 초기화 하였다.

fun main() { 
    val list4 : List<Int> = List(10, {i->i+1})
    println(list4)
}

[실행결과]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

읽기 전용 타입이기 때문에 값을 변경하려고 할 때 오류가 발생된다. 값을 변경하고자 할 경우에는 MutableList, ArrayList를 사용하면 된다.  그러나 val로 선언한다면 값을 변경할 수 없으니 참고 하자.

MutableList 예제를 살펴보자.

//비어 있는 리스트로 초기화
val list = mutableListOf<String>()

val list2: MutableList<String> = mutableListOf("apple", "orange", "peach")
fun main() {
    
    //빈 리스트로 초기화
    //val list = mutableListOf<String>()
    
    val list: MutableList<String> = mutableListOf("apple", "orange", "peach")
    list.add("grape") //참조가 변경되는 것은 아니다.
    list.addAll(listOf("banana","pineapple"))
    println(list)
    println("list 사이즈 : ${list.size}")
    
    // val 리스트를 다시 할당하려고 함으로 컴파일 오류가 발생한다.
    // var를 사용하려 리스트를 정의하면 오류는 사라진다.
    //var list = mutableListOf<String>()
    //list = mutableListOf("banana", "pineapple")
    
}


[실행결과]

[apple, orange, peach, grape, banana, pineapple]
list 사이즈 : 6

ArrayList 예제를 살펴보자

fun main() {
 
    val list: ArrayList<String> = arrayListOf("apple", "orange", "peach")
	list.add("grape") //참조가 변경되는 것은 아니다.
    list.addAll(listOf("banana","pineapple"))
	println(list)
    println("list 사이즈 : ${list.size}")
    
    list.remove("apple")
	println(list)  
    
    list.removeAt(0)  //index
	println(list)      
    // val 리스트를 다시 할당하려고 함으로 컴파일 오류가 발생한다.
    // var를 사용하려 리스트를 정의하면 오류는 사라진다.
    //list = arrayListOf("banana", "pineapple")
    
}


[실행결과]

[apple, orange, peach, grape, banana, pineapple]
list 사이즈 : 6

[orange, peach, grape, banana, pineapple]

[peach, grape, banana, pineapple]

■ Set 예제를 살펴보자

Set은 중복되는 값을 허용하지 않는다. 중복되는 값이 들어오면 알아서 제거하고 하나의 값만 남긴다.

fun main() {
 
    val setData: Set<Int> = setOf<Int>(1,2,1,1,2,3,4,5)
	println(setData)
    println("setData 사이즈 : ${setData.size}")
}


[출력결과] 

[1, 2, 3, 4, 5]
setData 사이즈 : 5

MutableSet 예제를 살펴보자

fun main() {
 
    val list: MutableSet<String> = mutableSetOf("apple", "orange", "peach")
	list.add("grape") //참조가 변경되는 것은 아니다.
    list.addAll(listOf("banana","pineapple"))
	
    println(list)
    println("list 사이즈 : ${list.size}")
    
    list.remove("apple")
	println(list)   
    
}


[실행결과]

[apple, orange, peach, grape, banana, pineapple]
list 사이즈 : 6
[orange, peach, grape, banana, pineapple]

HashSet 예제를 살펴보자

fun main() {
 
    val list: HashSet<String> = hashSetOf("apple", "orange", "peach")
	list.add("grape") //참조가 변경되는 것은 아니다.
    list.addAll(listOf("banana","pineapple"))
	
    println(list)
    println("list 사이즈 : ${list.size}")
    
    list.remove("apple")
	println(list)  
     
}

[실행결과]

[orange, peach, banana, apple, grape, pineapple]
list 사이즈 : 6
[orange, peach, banana, grape, pineapple]

LinkedHashSet 예제를 살펴보자. 자료구조 상으로 볼 때 포인터를 통하여 다음 데이터와 연결되어 있음으로 메모리 저장 공간을 좀 더 효율적으로 사용한다.

fun main() {
 
    val list: LinkedHashSet<String> = linkedSetOf("apple", "orange", "peach")
	list.add("grape") //참조가 변경되는 것은 아니다.
    list.addAll(listOf("banana","pineapple"))
	
    println(list)
    println("list 사이즈 : ${list.size}")
    
    list.remove("apple")
	println(list)  
 
    
}

[실행결과]

[apple, orange, peach, grape, banana, pineapple]
list 사이즈 : 6
[orange, peach, grape, banana, pineapple]

■ Map 예제를 살펴보자

키 값으로 알파벳 a,b,c,d,e가 사용되었다. 그럼으로 get()메서드 사용시 키값으로 “a”를 대입하여  1이라는 값을 가져올 수 있다.

fun main() {
     
    val map1: Map<String, Int> = mapOf("a" to 1, "b" to 2, "c" to 3, Pair("d", 4), Pair("e",5))
    println(map1.get("a"))    
    println(map1.get("d")) 
    println("map1 사이즈 : ${map1.size}")
    
}


[실행결과]

1
4
map1 사이즈 : 5

MutableMap 예제를 살펴 보자

fun main() {
 
    val list: MutableMap<String, Int> = mutableMapOf("apple" to 1, "orange" to 2, "peach" to 3)
    list.put("grape", 4) //참조가 변경되는 것은 아니다.
    list.putAll(mutableMapOf("banana" to 5,"pineapple" to 6))
    println(list)
    println("list 사이즈 : ${list.size}")
    
    list.remove("apple")
    println(list)   
    
    list["peach"] = 22
    println(list)   
    
}


[실행결과]

{apple=1, orange=2, peach=3, grape=4, banana=5, pineapple=6}
list 사이즈 : 6
{orange=2, peach=3, grape=4, banana=5, pineapple=6}
{orange=2, peach=22, grape=4, banana=5, pineapple=6}

■컬렉션 변환

[REFERENCE]

kotlinlang.org/docs/reference/collections-overview.html

medium.com/hongbeomi-dev/kotlin-collection-%ED%95%A8%EC%88%98-7a4b1290bce4

[코틀린 더 알아보기]

[android : kotlin] 코틀린 클래스와 생성자(Constructor) 및 용어 정리 : 프로퍼티(Property), 인스턴스(Instance), override, open class , open fun

[android : kotlin] 코틀린 lateinit, lazy 사용방법 및 예제

[android : kotlin] 코틀린 JSON 객체 파싱하는 방법 및 RecyclerView 아이템 추가 및 삭제방법 : Assets폴더 내에 json파일 파싱방법

[android : kotlin] 코틀린 웹뷰(WebView) 사용 설정 방법 및 예제 총정리

Leave a Reply

error: Content is protected !!