본문 바로가기
수업내용

20230803 Kotlin

by titlejjk 2023. 8. 3.
package com.example.hellokotlin

fun main(){
     val mem:MutableMap<String, Any> = mutableMapOf<String, Any>()
    //Map에 데이터 넣는 방법1
    mem.put("num", 1)
    mem.put("name", "김구라")
    mem.put("isMan", true)

    //수정가능한 Map
    val mem2 = mutableMapOf<String, Any>()
    //Map에 데이터 넣는 방법2
    mem2["num"]=2
    mem2["name"]="원숭이"
    mem2["isMan"]=true
    //MutableMap이기 때문에 수정가능
    mem["num"]=999
}

어떤 데이터를 index로 관리를 하고 ReadOnly로 사용하고 싶다면 List를 사용하면 된다.

fun main(){
    val names:List<String> = listOf<String>("kim","lee","park")
}

여기서 listOf<String>으로 String이 추론되므로 names뒤에 List<String>은 생략이 된다.

fun main(){
    val names = listOf<String>("kim","lee","park")
}

여기서 또 listOf<String>뒤에 ("kim", "lee", "park")를 보고 String인 것을 보고 추론이 가능하므로 이도 생략이 가능하다.

fun main(){
    val names = listOf("kim","lee","park")
}

 

 

아래코드를 보면

val nums = listOf(10,20,30)

들어 있는 값을 통해 제네릭에 Int가 들어간다는 것을 알수 있다.

 

아래의 type은 List<Any> type인 것을 알 수 있다.

val info = listOf(10, "kim", true)

 

그럼 이제 List의 index별 참조방법을 알아보겠다.

 

//names List의 0번 index 참조하는 방법 1
    val a = names.get(0)
    //names List의 0번 index 참조하는 방법 2
    val b = names[0]
    //names의 item 갯수 참조
    val c = names.size
    //names에 저장된 item을 순서대로 순회 하면서 참조
    names.forEach(fun(item){
        println(item)
    })

 

위의 forEach()함수를 줄인 표현으로 사용하면

names.forEach {
        println(it)
    }

로 사용하면된다.


MutableList

package com.example.hellokotlin

/*
    순서가 중요한 데이터를 사용하고, 중간에 수정도 가능하게 하려면
    MutableList를 사용하면 된다.
 */

fun main(){
    val names:MutableList<String> = mutableListOf<String>("김구라","해골")
    //type추론이 가능하기 때문에 type을 생략하면 아래와 같다.
    val foods = mutableListOf("라면","김밥")
    //mutable이기 때문에 아이템 추가 가능
    foods.add("쫄면")
    foods.add("떡볶기")
    foods.add("어묵")
    //아이템 수정가능
    foods.set(0,"신라면")
    foods[1] = "참치김밥"
    //아이템 삭제 가능
    foods.removeAt(2)//2번 인텍스의 아이템 삭제
    foods.removeLast()//마지막 이덱스의 아이테 삭제
    foods.forEach {
        println(it)
    }
}


Kotlin의 Null관리

Kotlin에서는 null이 가능한 type과 null이 불가능한 type이 구분되어 있다.

null이 가능한 type데이터를 사용(필드 참조or 메서드 호출)할 때는 추가해야하는 문법이 있다,

 

fun main(){
    var str:String = "abcde12345"
    
    var str2:String? = "abcde12345"
}

이 때 str에는 null대입이 불가능하고 

str2에는 null대입이 가능해진다.

package com.example.hellokotlin

/*
    kotlin 에서는  null 이 가능한 type 과  null 이 불가능한 type 이 구분되어 있다.
    null 이 가능한 type 데이터를 사용(필드 참조 or 메소드 호출) 할때는 추가해야 하는 문법이 있다.
 */

// null 이 가능한 매개 변수가 선언되어 있는 함수
fun send(msg:String?){
    // msg 가 null 이 아니면 length 를 참조해라
    val result=msg?.length
    // msg 는 확실히 null 이 아니야 그냥 length 를 참조해!
    val result2=msg!!.length
}

fun main(){
    var str:String = "abcde12345"
    var str2:String? = "abcde12345"

    // str=null //null 대입 불가
    str2=null //null 대입 가능

    //문자열의 길이를 안전하게 참조 할수 있다.
    val result:Int = str.length
    /*
            참조값 ?. 필드참조 or 메소드호출
            은 참조값이 null 이 아닌경우에 우측의 필드참조 or 메소드 호출을 수행하라는 의미
            만일 참조값이 null 이면  필드참조나 메소드 호출을 하지 않고 null 을 남긴다.
     */
    val result2:Int? = str2?.length

    println("result:$result")
    println("result2:$result2")

    var str3:String? = null
    str3="안녕하세요"
    // 컴파일러가 null 이 아닌것을 확실히 인지한다면  ? 생략가능
    val result3 = str3.length

    send("hi")
    //아래는  NullPointerException 발생
    send(null)
}

 

'수업내용' 카테고리의 다른 글

20230807 Kotlin Constructor  (0) 2023.08.07
20230801 Kotlin  (0) 2023.08.01
20230731 Kotlin  (0) 2023.08.01
20230731 Kotlin  (0) 2023.07.31
20230728 Kotlin  (0) 2023.07.28

댓글