๐ก์ต๋ช ํจ์, ์ธ๋ผ์ธ ํจ์, ํ์ฅํจ์, Infix ํจ์, ๊ณ ์ฐจํจ์๐ก
โช๏ธํจ์ํ ํ๋ก๊ทธ๋๋ฐ
· Java๋ ์๋ฒฝํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค.
· Kotlin์ ํจ์๋ง ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ ์ง์ํ๋ค.
· ๊ฐ๋จํ ํจ์๋ ํ ์ค๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
fun main() {
val result1 = fun1(100, 200)
println(result1)
val result2 = fun2(200, 300)
println(result2)
val result3 = fun2(300, 400)
println(result3)
}
fun fun1(num1 : Int, num2 : Int) : Int {
return num1 + num2
}
// fun1์ฒ๋ผ ๊ฐ๋จํ ํจ์๋ ํ ์ค๋ก ์์ฑ์ด ๊ฐ๋ฅ
fun fun2(num1 : Int, num2 : Int) : Int = num1 + num2
// ์๋์ผ๋ก ํ์
์ ์์๋ผ ์ ์์ผ๋ฏ๋ก ๋ฐํ ํ์
์๋ต ๊ฐ๋ฅ
fun fun3(num1 : Int, num2 : Int) = num1 + num2
๋๋ค์
· ์์์ ์์ฑํ ํจ์์ ๊ฐ์ ํํ๋ ๋๋ค๋ผ๋ ๊ฒ์ผ๋ก ๋ฐ๊ฟ ์ฌ์ฉํ ์ ์๋ค.
· ํน์ ํจ์ ๋ด์์๋ง ์ฌ์ฉํ๋ ์ฐ์ฐ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉ๋๋ค.
fun main() {
val lambda1 : (Int, Int) -> Int = { num1 : Int, num2 : Int -> num1 + num2 }
val result1 = lambda1(100, 200)
println(result1)
// ๋๋ค ๋ํ ํ์
์๋ต์ด ๊ฐ๋ฅ
val lambda2 = { num1 : Int, num2 : Int -> num1 + num2 }
val result2 = lambda2(200, 300)
println(result2)
// ์์ ํ์
์ ๋ณด๊ณ ์ถ๋ก ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ดํธ์์ ํ์
์๋ต ๊ฐ๋ฅ
val lambda3 : (Int, Int) -> Int = { num1, num2 -> num1 + num2 }
val result3 = lambda2(300, 400)
println(result3)
val lambda4 = { num1 : Int, num2 : Int ->
val result1 = num1 + num2
val result2 = num1 - num2
// ๋๋ค์์์ ๋ง์ง๋ง์ด return๊ฐ
result1 * result2
}
val result4 = lambda4(400, 500)
println(result4)
}
โช๏ธ์ต๋ช ํจ์
· ํจ์์ ์ด๋ฆ์ด ์๋ ํจ์์ด๋ค.
· ํจ์๋ฅผ ๋ณ์์ ๋ด์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
fun main() {
val NonFunction = fun() {
println("NonFunction ํธ์ถ")
}
NonFunction()
}
โช๏ธ์ธ๋ผ์ธ ํจ์
· ์ ์ฒด ์ฝ๋ ์์ด ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
· ์ฝ๋ ํ๋ฆ์ ์ด๋ ์์ด ์ํ๋๊ธฐ ๋๋ฌธ์ ์์ ๋์ด ๋์ด๋์ง ์๋๋ค.
fun main() {
inlFunction1()
inlFunction1()
// inlFunction2() ํจ์๋ด์ ์ฝ๋๊ฐ ๋ณต์ฌ๋์ด ๋ฎ์ด์์์ง
inlFunction2()
inlFunction2()
/*
์ฝ๋๊ฐ ์คํ๋๋ฉด ์๋์ฒ๋ผ ๋ฐ๋
println("----------")
println("inlFunction2 ํธ์ถ")
println("----------")
println("----------")
println("inlFunction2 ํธ์ถ")
println("----------")
*/
}
fun inlFunction1() {
println("----------")
println("inlFunction1 ํธ์ถ")
println("----------")
}
inline fun inlFunction2() {
println("----------")
println("inlFunction2 ํธ์ถ")
println("----------")
}
โช๏ธํ์ฅํจ์
· ๊ธฐ์กด ํด๋์ค์ ์๋ก์ด ํจ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
· ๊ธฐ์กด ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๋ฐ์ ํจ์๊ฐ ๋ง๋ค์ด์ง๊ณ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
fun main() {
var str = "abcd"
println(str.extFunction())
}
// ๊ธฐ์กด String ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง
// ์ค์ ๋ก๋ ๊ทธ๋ฅ ์ผ๋ฐ์ ์ธ ๋ฉ์๋๋ก ๋ง๋ค๊ณ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ์ ๋ฌ๋ฐ์
fun String.extFunction() : String {
return this.toUpperCase()
}
โช๏ธInfix ํจ์
· ํจ์๋ฅผ ์ฐ์ฐ์์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ํจ์์ด๋ค.
fun main() {
val result1 = 100 add2 100
println("result1 : $result1")
val result2 = 100 minus2 100
println("result2 : $result2")
}
infix fun Int.add2(num : Int) : Int {
return this + num
}
infix fun Int.minus2(num : Int) : Int {
return this - num
}
โช๏ธ๊ณ ์ฐจํจ์
· ํจ์๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ๊ฑฐ๋ ๋ฐํ ํ์ ์ด ํจ์์ธ ํจ์๋ฅผ ๊ณ ์ฐจํจ์๋ผ๊ณ ๋ถ๋ฅธ๋ค.
· ํจ์ ํธ์ถ ์ ์ ๋ฌํ๋ ํจ์์ ๋ฐํํ๋ ํจ์๋ ๋๋ค์์ ์ฌ์ฉํ ์ ์๋ค.
fun main() {
// ์ต๋ช
ํจ์ ์ฌ์ฉ
val fun1 = fun(n1 : Int, n2 : Int) : Int {
return n1 + n2
}
higFunction1(fun1, 100, 200)
// ์ต๋ช
ํจ์๋ฅผ ๋ฐ๋ก ๋ฃ์ด ์ฌ์ฉ ๊ฐ๋ฅ
higFunction1(fun(n1 : Int, n2 : Int) : Int {
return n1 - n2
}, 100, 200)
// ๋๋ค ์ฌ์ฉ
val lambda1 = { n1 : Int, n2 : Int -> n1 * n2 }
higFunction1(lambda1, 100, 200)
// ๋๋ค๋ฅผ ๋ฐ๋ก ๋ฃ์ด ์ฌ์ฉ ๊ฐ๋ฅ
higFunction1({n1 : Int, n2 : Int -> n1 / n2}, 200, 100)
///////////////////////////////////////////////////
val fun2 = higFunction2()
val result2 = fun2(100, 200)
println("result2 : $result2")
val fun3 = higFunction3()
val result3 = fun3(100, 200)
println("result3 : $result3")
}
// ๋งค๊ฐ ๋ณ์๊ฐ ํจ์์ธ ๊ณ ์ฐจํจ์
fun higFunction1(f:(Int, Int) -> Int, num1 : Int, num2 : Int) {
val result1 = f(num1, num2)
println("result1 : $result1")
}
// ๋ฐํ ํ์
์ด ํจ์์ธ ๊ณ ์ฐจํจ์
fun higFunction2() : (Int, Int) -> Int {
return fun(n1 : Int, n2 : Int) : Int {
return n1 + n2
}
}
// ๋ฐํ ํ์
์ด ๋๋ค์ธ ๊ณ ์ฐจํจ์
fun higFunction3() : (Int, Int) -> Int {
return { n1 : Int, n2 : Int -> n1 - n2 }
}
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/019.gif)
'๐ฑ > ๐Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ์ปฌ๋ ์ (1) | 2022.12.26 |
---|---|
[Kotlin] ๋ค์ํ ํด๋์ค (0) | 2022.12.20 |
[Kotlin] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.12.20 |
[Kotlin] ์ ์ด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ (0) | 2022.12.20 |
[Kotlin] ๊ธฐ๋ณธ ๋ฌธ๋ฒ (0) | 2022.12.20 |