경험의 기록

List, Set, Map 은 기본적으로 Mutable 타입과 Immutable 타입으로 나누어 사용한다.

Mutable 타입은 수정이 가능하고, Immutable 타입은 수정이 불가능하다.

 

기본적인 개념과 생성 함수

fun main(args:Array<String>){

    // 1. Array
    /* 배열은 사이즈가 할당되어 있다. */
    val arr1 = arrayOf(1,2,3) // 1,2,3을 담은 배열 생성
    val arr2 = Array(3){0} // 크기가 3이고 초기값이 0인 배열 생성
    val arr3 = emptyArray<Int>() // Int 타입의 빈 배열 생성
    arr1[0] = 7 // 0번째 값을 7로 바꾼다 (배열은 Mutable 타입이기 때문에 수정 가능)
    
    

    // 2. List
    /* 리스트는 순서를 가지고, 사이즈가 자동으로 정해지며 기본은 Immutable 타입 */
    val list1 = listOf(1,2,3) // 1,2,3을 담은 리스트 생성
    val list2 = List(3){0} // 크기가 3이고 초기값이 0인 리스트 생성
    val list3 = arrayListOf<Int>(1,2,3) // 1,2,3을 담은 arrayList 생성 (Mutable)
    // list1[0] = 1 --> 오류발생 (수정 불가능)
    list3[0] = 1 // 0번째 값을 1로 바꾼다 (arrayList 는 Mutable 타입)
    list3.add(10) // 다음 값으로 10을 추가
    
    

    // 3. Set
    /* 집합은 순서를 가지지 않고, 중복 불가능. 사이즈가 자동으로 정해지며 기본은 Immutable 타입 */
    val set1 = setOf(1,2,3) // 1,2,3을 담은 Set 생성 (수정 불가)
    val set2 = mutableSetOf(1,2,3) // 1,2,3을 담은 mutableSet 생성 (수정 가능)
    set2.remove(2) // 집합에서 2 삭제
    
    

    // 4. Map
    /* 요소를 키와 값의 쌍의 형태로 저장. 키는 중복 불가능. 사이즈 자동, 기본 Immutable */
    val map1 = mapOf(1 to "Kim", 2 to "Han") // 수정 불가능
    val map2 = mutableMapOf(1 to "Kim", 2 to "Han") // 수정 가능
    map2.size // 맵의 사이즈 반환
    map2.keys // 맵의 모든 키 반환
    map2.values // 맵의 모든 값 반환
    map2.isEmpty() // 맵이 비어있으면 true, 아니면 false
    map2.containsKey(1) // 1에 해당하는 키가 있으면 true, 아니면 false
    map2.containsValue("Kim") // Kim에 해당하는 값이 있다면 true, 아니면 false
    map2[1] // 키에 해당하는 값 반환
    map2.put(3, "Lee") // 3과 Lee의 쌍 추가
    map2.remove(1) // 1에 해당하는 요소 제거
    map2.clear() // 초기화
}

 

Kotlin 컬렉션 함수 

컬렉션 함수를 사용하면 컬렉션을 좀 더 편리하고 유용하게 사용할 수 있다.

 

fun main(args:Array<String>){
    val list = listOf(1,2,3,4,5)

    list.forEach() { print("$it " )} // 컬렉션에 포함된 모든 요소 출력
    println()

    println(list.filter { it < 3 }) // 조건에 맞는 요소 반환
    println(list.map { it+5  }) // 수식을 적용하여 값 변경하여 반환
    println(list.first()) // 첫 번째 요소 반환
    println(list.first { it > 3 }) // 조건에 맞는 첫 번째 요소 반환
    println(list.last()) // 마지막 요소 반환
    println(list.last{it < 3}) // 조건에 맞는 마지막 요소 반환
    println(list.count() { it < 3 }) // 조건에 맞는 요소의 개수 반환
    println(list.any { it < 3 }) // 조건에 하나라도 일치하는 요소가 있다면 true
    println(list.all { it < 3 }) // 모든 요소가 조건에 맞다면 true
    println(list.none { it < 3 }) // 조건에 하나도 맞지 않으면 true
    println(list.reduce { acc, i -> acc * i }) // 내부의 데이터를 다 모아줌
    println(list.fold(10) { acc, i -> acc * i }) // 내부의 데이터를 다 모아줌 (초기값 지정)


}

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading