๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Android/Android Studio

[Android] 6. Kotlin ๊ธฐ๋ณธ ๋ฌธ๋ฒ•_ํ•จ์ˆ˜ & ๋ฉ”์†Œ๋“œ์™€ ์ง€์—ญ๋ณ€์ˆ˜, ์ „์—ญ๋ณ€์ˆ˜

by A Lim Han 2023. 1. 6.

# Kotlin ๊ธฐ๋ณธ ๋ฌธ๋ฒ•_ํ•จ์ˆ˜ & ๋ฉ”์†Œ๋“œ์™€ ์ง€์—ญ๋ณ€์ˆ˜, ์ „์—ญ๋ณ€์ˆ˜

 

 

# Kotlin ๊ธฐ๋ณธ ๋ฌธ๋ฒ•_ํ•จ์ˆ˜

 

- ํ•จ์ˆ˜ ์„ ์–ธ (๊ธฐ๋ณธํ˜•)

fun ํ•จ์ˆ˜๋ช…([๋ณ€์ˆ˜๋ช…: ์ž๋ฃŒํ˜•, ๋ณ€์ˆ˜๋ช…: ์ž๋ฃŒํ˜•..]) : [๋ฐ˜ํ™˜๊ฐ’์˜ ์ž๋ฃŒํ˜•]
{
	ํ‘œํ˜„์‹
    [return ๋ฐ˜ํ™˜๊ฐ’]
}

 

 

 

- ํ•จ์ˆ˜ ์„ ์–ธ(์ผ๋ฐ˜์  ์„ ์–ธ๊ณผ ๊ฐ„๋žตํ•œ ์„ ์–ธ)

//์ผ๋ฐ˜์  ์„ ์–ธ
fun sum(a: Int, b: Int): Int
{
	return a+b
}

//๊ฐ„๋žตํ•œ ์„ ์–ธ
fun sum(a: Int, b: Int): Int = a + b
fun sum(a: Int, b: Int) = a + b

 

 

 

ex) ์˜ˆ์‹œ 1_sumFunc.kt

 

 

 

- ์ˆœ์ˆ˜ ํ•จ์ˆ˜(Pure Function)

: ๋ถ€์ž‘์šฉ์ด ์—†๋Š” ํ•จ์ˆ˜๋กœ, ๊ฐ’์ด ์—์ธก ๊ฐ€๋Šฅํ•˜์—ฌ ๊ฒฐ์ •์ (deterministic)์ด๋‹ค.

-->  ๋™์ผํ•œ ์ž…๋ ฅ ์ธ์ž์— ๋Œ€ํ•ด์„œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ

 

: ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

๊ฐ™์€ ์ธ์ž์— ๋Œ€ํ•˜์—ฌ ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š์•„์•ผ ํ•จ

 

ex) ์ˆœ์ˆ˜ ํ•จ์ˆ˜์˜ ์˜ˆ

fun sum(a: Int, b: Int): Int
{
	return a + b	//๋™์ผํ•œ ์ธ์ž์ธ a, b๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ•ญ์ƒ a + b๊ฐ’์„ ์ถœ๋ ฅ
}

 

 

 

- ๋žŒ๋‹ค์‹(Lamda Expression)

: ๋žŒ๋‹ค ๋Œ€์ˆ˜๋กœ๋ถ€ํ„ฐ ์œ ๋ž˜ํ•˜์˜€์œผ๋ฉฐ, ์ต๋ช… ํ•จ์ˆ˜์˜ ํ•˜๋‚˜์˜ ํ˜•ํƒœ์ด๋‹ค. ์ด๋ฆ„ ์—†์ด๋„ ์‚ฌ์šฉ ๋ฐ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

{ x, y -> x + y }	//๋žŒ๋‹ค์‹์˜ ์˜ˆ์‹œ (์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜ ํ˜•ํƒœ)

 

: ๋žŒ๋‹ค์‹์˜ ์ด์šฉ

-->  ๋žŒ๋‹ค์‹์€ ๊ณ ์ฐจ ํ•จ์ˆ˜์—์„œ ์ธ์ž๋กœ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ ๋“ฑ์˜ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

-->  ์•„๋ž˜์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ๋žŒ๋‹ค์‹์„ ์ ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•จ

fun main()
{
    var result: Int
    val multi = {x: Int, y: Int -> x * y }
    
    result = multi(10, 20)
    println(result)
}

 

ex) ์ผ๋ฐ˜์ ์ธ ๋ฉ”์†Œ๋“œ ํ˜•์‹์„ ๋žŒ๋‹ค์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ

fun addNumber (n1: Int, n2: Int): Int
{
	return n1 + n2
}

//๋žŒ๋‹ค์‹ ํ‘œํ˜„
val addNumber = { n1: Int, n2: Int -> n1 + n2 }

 

 

: ๋žŒ๋‹ค์‹์˜ ํŠน์ง•

1. ๋žŒ๋‹ค์‹์€ ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๋ฉฐ, fun ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉ X
2. ์ค‘๊ด„ํ˜ธ {} ์•ˆ '->'์˜ ์ขŒ์ธก์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ, ์šฐ์ธก์€ ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ์˜๋ฏธ
3. ํ™”์‚ดํ‘œ์˜ ์˜ค๋ฅธ์ชฝ ๋ฌธ์žฅ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ถ„
4. ๋‚ด์šฉ ์ค‘ ๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์€ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์˜๋ฏธ

 

 

 

- ๊ณ ์ฐจ ํ•จ์ˆ˜(high-order function)

: ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋‚˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜

 

 

 

 

# Kotlin ๊ธฐ๋ณธ ๋ฌธ๋ฒ•_๋ฉ”์†Œ๋“œ์™€ ์ „์—ญ ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜

 

- ๋ฉ”์†Œ๋“œ

: ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ์ธ main() ํ•จ์ˆ˜ ์™ธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ

: ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Œ

: ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋œ ๊ฒฐ๊ณผ๋ฅผ return ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅ

 

 

 

- ๋ณ€์ˆ˜

์ „์—ญ ๋ณ€์ˆ˜(global variable) ์ง€์—ญ ๋ณ€์ˆ˜(local variable)
๋ชจ๋“  ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ

 

ex) ์˜ˆ์‹œ 1_exam04.kt