μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ κ³ μ°¨ν•¨μˆ˜, λžŒλ‹€ν•¨μˆ˜

2022. 12. 5. 14:57ㆍ_Study/AndroidStudio

728x90

λžŒλ‹€ν•¨μˆ˜ πŸ‡¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•

λ³Έ μžλ£ŒλŠ” κ°•μ˜μžλ£Œλ₯Ό μ°Έκ³ ν•˜κ³  μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


 

λžŒλ‹€ν•¨μˆ˜ { λ§€κ°œλ³€μˆ˜ -> ν•¨μˆ˜ λ³Έλ¬Έ}

 

λžŒλ‹€ν•¨μˆ˜λŠ” 읡λͺ… ν•¨μˆ˜ μ •μ˜κΈ°λ²•μœΌλ‘œ fun ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ§€λ„ μ•Šκ³  ν•¨μˆ˜ 이름도 μ—†λ‹€.

λžŒλ‹€ν•¨μˆ˜λŠ” {}둜 ν‘œν˜„ν•˜λ©° ->(ν™”μ‚΄ν‘œ)κ°€ 있으며 μ™Όμͺ½μ„ λ§€κ°œλ³€μˆ˜ 였λ₯Έμͺ½μ€ ν•¨μˆ˜ 본문이닀.

ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ€ ν•¨μˆ˜ 본문의 λ§ˆμ§€λ§‰ ν‘œν˜„μ‹μ΄λ‹€.

val sum = {no1:Int, no2:Int -> no1+no2}

 

 

λ§€κ°œλ³€μˆ˜ μ—†λŠ” λžŒλ‹€ν•¨μˆ˜

 

ν™”μ‚΄νš¨ μ™Όμͺ½μ΄ λ§€κ°œλ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 뢀뢄인데 λ§€κ°œλ³€μˆ˜κ°€ 없을 경우 λΉ„μ›Œλ‘κ±°λ‚˜ ν™”μ‚΄ν‘œκΉŒμ§€ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.

 

 

 

 

맀개 λ³€μˆ˜κ°€ 1개인 λžŒλ‹€λ³€μˆ˜ : it ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

package com.example.ch3

fun main() {
   val some = {no: Int -> println(no) }
    some(20)
    val some2 :(Int) -> Unit = { println(it) }
    some2(30)
    val some3 =  { println(it) } // : value -> Unit 였λ₯˜
    some3(30)
}

 

 

 

 

λžŒλ‹€ ν•¨μˆ˜μ˜ λ°˜ν™˜

 

λžŒλ‹€ ν•¨μˆ˜μ—μ„œλŠ” return 문을 μ‚¬μš©ν•  수 μ—†μœΌλ©° λ°˜ν™˜κ°’μ€ 본문의 λ§ˆμ§€λ§‰ μ€„μ˜ μ‹€ν–‰ 결과이닀. 띄어쓰기λ₯Ό μ£Όμ˜ν•΄μ•Όν•œλ‹€.

package com.example.ch3

fun main() {
   //val some = {no1: Int, no2:Int -> return no1*no2 } // return 을 μ‚¬μš©ν•  수 μ—†μŒ
   // val some2 = { no1 : Int, no2:Int -> println("lamda function") no1 * no2 } // 띄어쓰기
    val some3 = { no1 : Int, no2:Int -> println("lamda function")
        no1 * no2 }
    println("result ${some3(10,20)}")
}

 

 

 

ν•¨μˆ˜ νƒ€μž…κ³Ό κ³ μ°¨ ν•¨μˆ˜

 

ν•¨μˆ˜ νƒ€μž… μ„ μ–Έ

ν•¨μˆ˜ νƒ€μž…μ΄λž€ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ‚˜νƒ€λ‚΄λŠ” λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜ νƒ€μž…μ„ μ˜λ―Έν•œλ‹€.

 

 

 

νƒ€μž…μ˜ 별칭을 μ„ μ–Έν•˜λŠ” ν‚€μ›Œλ“œλŠ” typealias 이며 λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•˜λ©΄ λœλ‹€. λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ μœ μΆ”ν•  수 μžˆλ‹€λ©΄ νƒ€μž…μ„ μ–Έμ„ μƒλž΅ν•  수 μžˆλ‹€.

package com.example.ch3

typealias MyInt = Int
typealias MyFunType = (Int, Int) -> Boolean

fun main() {
    val data1 : Int =10
    val data2 : MyInt = 20

    val someFun : MyFunType = {no1,no2 -> no1>no2}
    println(someFun(10,20))
    println(someFun(100,20))
}

 

 

 

κ³ μ°¨ν•¨μˆ˜ : ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λ°›κ±°λ‚˜ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. 즉, ν•¨μˆ˜μ˜ ν•¨μˆ˜

package com.example.ch3

fun hofFun(arg: (Int)->Boolean) : () -> String{
    val result = if(arg(10)){
        "valid"
    }else {
        "invalid"
    }
    return {"hotfun result : $result"}
}

fun main() {
    val result = hofFun { no -> no>0 }
    println(result())
}

 

널 μ•ˆμ •μ„±

널(null) μ΄λž€ 객체가 μ„ μ–Έλ˜μ—ˆμ§€λ§Œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€. 널인 μƒνƒœμ˜ 객체λ₯Ό μ΄μš©ν•˜λ©΄ 널 포인트 μ˜ˆμ™Έ(NullPountException)이 λ°œμƒν•œλ‹€. 널 μ•ˆμ „μ„±μ΄λž€ 널 포인트 μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것이닀. 즉, 였λ₯˜λ₯Ό 사전에 μ°¨λ‹¨ν•˜λŠ” 것

Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

 

package com.example.ch3

fun main() {
    val data: String? = null //?라 null κ°€λŠ₯
    val length = if(data == null){
        0
    }else{
        data.length
    }
    println("Data length : $length")
}

 

 

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ 널 μ•ˆμ „μ„±μ„ μ§€μ›ν•œλ‹€λŠ” 것은 객체가 널인 μƒν™©μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ μ—°μ‚°μžλ₯Ό λΉ„λ‘―ν•΄ μ—¬λŸ¬κΈ°λ²•μ„ μ œκ³΅ν•˜κ² λ‹€λŠ” μ˜λ―Έμ΄λ‹€.

 

 

 

μ•ˆμ „μ„± μ—°μ‚°μž (?.)

널 ν—ˆμš© μ—°μ‚°μž ?둜 μ„ μ–Έν•˜λ©° 이 λ³€μˆ˜μ— μ ‘κ·Όν• λ•ŒλŠ” ?. μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄μ•Ό ν•œλ‹€.

 

μ—˜λΉ„μŠ€ μ—°μ‚°μž(?:) : 널일 λ•Œ λŒ€μž…ν•΄μ•Όν•˜λŠ” κ°’μ΄λ‚˜ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” ꡬ문이 μž‡λŠ” 경우 이용

 

μ˜ˆμ™Έ λ°œμƒ !! : 객체가 널일 λ•Œ μ˜ˆμ™Έλ₯Ό μΌμœΌν‚€λŠ” μ—°μ‚°μž

Exception in thread "main" java.lang.NullPointerException