본문 바로가기
Kotlin

Kotlin6. 컬렉션

by 히예네 2023. 7. 31.
728x90
반응형

1. 배열에 대해서

(1) 기본적인 사용방법

컬렉션 : 많은 값들을 묶어서 관리하기 위한 기능으로, 이를 위해 전용 값이 준비 되어있다. 

그 중에 제일 기본적인 값은 배열이다. 

fun main() {

    val arr = arrayOf(10,11,12,13,14)
    var total = 0
    for(item in arr){
        total += item
        println(total)
    }
    val ave = total/5
    
    println("total : $total  ave : $ave" )
   //output
    10
    21
    33
    46
    60
    total : 60  ave : 12
}

arrayOf :  가장 기본적인 배열이다. 컴마를 찍어서 필요한 만큼 나열한다.

 

    for(item in arr){
        total += item
    }

여기서 (item in arr)는 arr의 size만큼 돌고 인덱스값에 따라서 순서대로 더한다. 

 

 

 

(2) 배열의 단점

a) 배열은 같은 형들만 넣을 수 있다. 

intArrayOf, doubleArrayOf.. 등등 

 

※stringOf라는 배열은 없다. 

 

b) 배열은 처음 정해준 인덱스 크기만큼 사용가능하다. 새롭게 인덱스번호를 추가할수없다.

fun main() {
	var arr = arrayOf(1,2,3)
    println(arr[3])
   //에러임. arr[3]는 존재하지 않는다. 
}

2. 리스트에 대해

(1) 기본적인 사용방법 

다른 값들을 하나로 묶어서, 요소를 추가/삭제를 자유자재로 하려면? 리스트를 쓰면된다.

리스트의 종류는 2가지 - ListMutableList 

listOf는 나열된 값변경이 불가하지만(인덱스번호도 늘리지 못한다)  ,mutableListOf는 내용을 자유롭게 조작할 수 있다. 

 

fun main() {
    val arr = listOf(10,11,12,13,14)
    var total = 0
    for(item in arr){
        total += item
        println(total)
    }
    val ave = total/5
    
    println("total : $total  ave : $ave" )
    //output
    10
    21
    33
    46
    60
    total : 60  ave : 12
}

listOf와 arrayOf는 사용법이 거의 똑같다. 

 

(2) 리스트 조작해보기

mutableListOf는 add와 remove를 통해서도 조작 가능dD하다. 

list.addAll( 새로운 리스트)

-> 이러면 마지막에 새로운 리스트를 붙인다. (덮어쓰기 아님!!!)

 

fun main() {
    var arr = mutableListOf(10,11,12,13,14)
  
    arr.removeFirst()
    arr.remove(11)
    println(arr)
    
    //output
    [12, 13, 14]
}

 

3.맵에 대해서 

배열과 리스트와는 다르게 key값으로 값들을 보관한다. 

mapOf와 mutableMapOf로 나뉜다. 

fun main() {
    var map = mapOf("name" to "sue","age" to "100")
    println(map)
    println(map["name"])
    
    var mutableMap = mutableMapOf("email" to "sue@gmail.com")
    println(mutableMap)   
    
    //output
    {name=sue, age=100}
    sue
    {email=sue@gmail.com}
}

(1) 맵의 특징

맵은 인덱스가 아닌 key값으로 값들을 불러온다. 인덱스번호자체가 없다. 리스트 처럼 작성한 순서대로 값을 빼내는게 아니다. 

그래서 값의 순서가 정확하게 정해진게 아니다. 그리고 key값이 중복된다면 하나만 출력된다. key값에는 오직 하나의 값만 넣는다.

fun main() {
  	var arr = mutableMapOf(
        "one" to "cake",
        "two" to "macha",
        "three" to "candy",
    )
    arr["four"] = "sweet"
    
    for((k,v) in arr){
        println("key는 $k 이고 value는 $v 입니다.")
    }
    
    //output
    key는 one 이고 value는 cake 입니다.
    key는 two 이고 value는 macha 입니다.
    key는 three 이고 value는 candy 입니다.
    key는 four 이고 value는 sweet 입니다.
}

 

Pair 클래스를 이용하여 뽑아 낼 수도있다.

fun main() {
  	var arr = mutableMapOf(
        "one" to "cake",
        "two" to "macha",
        "three" to "candy",
    )
    arr["four"] = "sweet"
    
    for(item in arr){
        println("key는 ${item.key} 이고 value는 ${item.value} 입니다.")
    }
    
    //output
    key는 one 이고 value는 cake 입니다.
    key는 two 이고 value는 macha 입니다.
    key는 three 이고 value는 candy 입니다.
    key는 four 이고 value는 sweet 입니다.
}

여기서 item은 누구인가? 

for(item in arr){
        println("key는 ${item.key} 이고 value는 ${item.value} 입니다.")
    }

Pair라는 키와 값을 세트로 관리하는 특수한 클래스~

 

4. 세트에 대해서

중복을 허락하지 않는다!

fun main() {
    var fruit = setOf("apple","banana","orange")
    var color = setOf("black","pink")
    
    println(fruit.union(color)) //합집합
    println(fruit.intersect(color)) //교집합  
    
    //output
    [apple, banana, orange, black, pink]
	[]
}

 

5. 제네릭

컬렉션에 어떠한 값이라도 다 들어가게 된다면? 편한거보다 .. 무엇이 들어가있는지 헷갈리는 경우가 더 많을것이다.

그래서 컬렉션을 쓸 때 난 이 자료형만 쓸 거라고 명시해주는것이 제네릭이다.

 

 < > 이 안에 자료형을 써준다. 

var arr= listOf<String>( ) 

var arr2= mapOf<String, Int>( )

var arr3= setOf<String>
728x90
반응형