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 |
댓글