๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ถœ์ฒ˜

https://brunch.co.kr/@wegra/20

 

[๊ฐœ๋ฐœ ์ƒ์‹] 3๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ๊ณผ ๋ถ€ํฅ

3๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ ์ˆœ์„œ์™€ ๋ถ€ํฅ ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€์ธ ์ด์œ ๋Š”? | โ˜… ์—ญ์‹œ๋‚˜ ์˜ค๋ž˜์ „์—, ์ง€์ธ๊ป˜ ๊ฐ„๋žตํžˆ ์„ค๋ช…๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ •๋ฆฌํ•ด๋‘” ๊ธ€์ž…๋‹ˆ๋‹ค. ๊นŠ๊ฒŒ ์กฐ์‚ฌํ•ด์„œ ์ •๋ฆฌํ•œ ๊ฑด ์•„๋‹ˆ๋‹ˆ ๊ฐ์•ˆํ•ด์„œ ๊ฐ€

brunch.co.kr

 

https://www.spri.kr/download/22433

https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS4313717600

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(functional programming)์ด๋ž€?

์›ํ•˜๋Š” ๋งŒํผ ํ•จ์ˆ˜์ ์ด ๋˜์–ด๋ผ.ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(functional programming)์€ ๋ณธ์งˆ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜ํ•™์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋งŽ์€ ๊ฐœ๋…๋“ค์€ ์•Œ๋ก ์กฐ ์ฒ˜์น˜(Alonzo Church)์˜ ๋žŒ๋‹ค

www.hanbit.co.kr

https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(ๅ‡ฝๆ•ธๅž‹ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์˜์–ด: functional programming)์€ ์ž๋ฃŒ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ๊ณ„์‚ฐ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ์ƒํƒœ์™€ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ko.wikipedia.org

https://hyojabal.tistory.com/41

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ ๊ฐœ๋…

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(functional programming)์€ ์ž๋ฃŒ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ๊ณ„์‚ฐ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ์ƒํƒœ์™€ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•˜๋‚˜. ์ƒํƒœ, ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ

hyojabal.tistory.com

https://com789.tistory.com/39

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ ์ค‘ ํ•˜๋‚˜๋ฉฐ, ์ˆœ์ˆ˜ ํ•จ์ˆ˜ ๊ตฌ์„ฑ์— ์ค‘์ ์„ ๋‘” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ์–ธ์ œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋‚˜์™”์„๊นŒ? ์ฒซ ๋ฒˆ์งธ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋‚˜์˜จ ์‹œ๊ธฐ

com789.tistory.com

Kotlin In Action


ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜ํ•™์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ๊ณ„์‚ฐ์œผ๋กœ ์ทจ๊ธ‰ํ•ด ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค.

์ƒํƒœ ๋ณ€ํ™”์™€ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์–‘ํ•œ๋‹ค. ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์˜ ์‘์šฉ์„ ๊ฐ•์กฐํ•œ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜ํ•™์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค๋Š” ๊ฒƒ์˜ ์˜๋ฏธ

1. ๋ถˆ๋ณ€์„ฑ immutability 

i = i+1 # or, more simply  
i += 1  # or, even more simply   
i++     # C, Java, but not Python or Ruby

 

์ˆ˜ํ•™์ ์œผ๋กœ ์œ„์˜ ํ‘œํ˜„๋“ค์€ ๋ง์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋“ฑ์‹์€ ๋‘ ๊ฐœ์˜ ๊ฐ’์— ๋Œ€ํ•œ ๊ด€๊ณ„์— "์ฐธ"์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋Š” ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. i๋Š” ์˜ค์ง i์™€ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค. "i๋Š” ์–ด๋– ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค"๊ณ  ์ •์˜๋ฅผ ๋‚ด๋ผ๋ฉด, i๋Š” ๋‹ค๋ฅธ ์–ด๋– ํ•œ ๊ฒƒ๊ณผ๋„ ๊ฐ™์„ ์ˆ˜ ์—†๋‹ค. i์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋ฅด๋Š” ๋ถˆ๋ณ€์˜ ๊ฐ’์ธ ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ๋ฒˆ ํ• ๋‹น๋˜๋ฉด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ถˆ๋ณ€์ด๋ฉฐ, ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

2. ๊ณ ์ฐจ ํ•จ์ˆ˜ Higher-Order Function

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ 1๊ธ‰ ์‹œ๋ฏผ(First-class Citizen)์œผ๋กœ ์ทจ๊ธ‰๋˜์–ด, ํ•จ์ˆ˜๊ฐ€ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๊ณ , ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

3. ์ˆœ์ˆ˜ ํ•จ์ˆ˜ Pure Function

๊ฐ™์€ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ถ€์ž‘์šฉ์ด๋ผ๋Š” ๊ฒƒ์ด ์—†๋‹ค. 

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์™œ ์ฃผ๋ชฉ๋ฐ›๋Š”๊ฐ€

๊ธฐ์กด์˜ ๋Œ€์„ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•œ๊ณ„๋ฅผ ๋ณด์•ˆํ•˜๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ฃผ๋ชฉ๋ฐ›๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(์ข๊ฒŒ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) -> ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ

 

๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ ๋ฐœ์ƒํ•œ ์ฃผ์š” ๋ฌธ์ œ

1. ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ๋ถ€์กฑ

๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ธ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ณ€์ˆ˜์˜ ๊ฐ’, ๊ฐ์ฒด์˜ ์ƒํƒœ ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๊ฐ€ ๊ณ„์† ๋ณ€ํ™”ํ•˜๊ณ , ์ด๋Ÿฌํ•œ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋…ผ๋ฆฌ์˜ ํ๋ฆ„์ด๋‹ค. ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์ด ๋–จ์–ด์ง€๊ณ , ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์˜ ๋ณ€์ˆ˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ์—๋Š” ์ƒํƒœ ์ถ”์ฒ™์ด ์–ด๋ ต๋‹ค. 

2. ๋™์‹œ์„ฑ ๋ฌธ์ œ

์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋™์ผํ•œ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ, ๊ณต์œ ๋œ ์ƒํƒœ๊ฐ€ ์ถฉ๋Œํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณต์žกํ•œ ์ฝ”๋“œ(๋ฝ, ๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด ๋“ฑ)์ด ํ•„์š”ํ•˜๋‹ค.

3. ๋ณต์žก์„ฑ ์ฆ๊ฐ€

์ƒํƒœ์™€ ํ•จ์ˆ˜๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ์ด ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ฐ์ฒด ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ์™ธ๋ถ€ ์„ธ๊ณ„์— ์˜์กด์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ์— ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ์ดํ•ด๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ณ  ๋ฒ„๊ทธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์–ด์ง€๋ฉฐ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์ง€๋Š” ์ฃผ์š” ์ด์œ ๊ฐ€ ๋œ๋‹ค. 

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด ๋ฌธ์ œ๋“ค์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€

1. ๋ถˆ๋ณ€์„ฑ

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ๋ฒˆ ํ• ๋‹น๋˜๋ฉด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ถˆ๋ณ€์ด๋ฉฐ, ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

-> ๋™์‹œ์„ฑ ๋ฌธ์ œ์—์„œ ์•ˆ์ •์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋”๋ผ๋„ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์—†์–ด์„œ ์ถฉ๋Œํ•  ์ผ์ด ์—†๋‹ค. ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์•ˆ์ „ํ•˜๋‹ค.

 

2. ์ˆœ์ˆ˜ ํ•จ์ˆ˜ Pure Function

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ์—๋งŒ ์˜์กดํ•˜๊ณ , ๋ถ€์ž‘์šฉ ์—†์ด ์ถœ๋ ฅ๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰, ๊ฐ™์€ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•˜ํ•ด ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์™ธ๋ถ€ ์ƒํƒœ๋‚˜ ๋ณ€์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

-> ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์—ฌ ์ค€๋‹ค. ๋ฒ„๊ทธ ์ถ”์  ๋ฐ ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ง„๋‹ค.

-> ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š ํ•จ์ˆ˜๋Š” ๊ทธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋Œ€ ํ•„์š”ํ•œ ์ „์ฒด ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ค€๋น„ ์ฝ”๋“œ(setup code)๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ•˜์ง€๋งŒ, ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋Š” ๊ทธ๋Ÿฐ ์ค€๋น„ ์ฝ”๋“œ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ๊ณ ์ฐจ ํ•จ์ˆ˜ Higher-Order Function

ํ•จ์ˆ˜๊ฐ€ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜์–ด ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด, ํ•จ์ˆ˜์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง„๋‹ค. ์ฝ”๋“œ์˜ ์ถ”์ƒํ™” ์ˆ˜์ค€๋„ ๋†’์•„์ง„๋‹ค. ์ฝ”๋“œ๊ฐ€ ํ•œ๊ฒฐ ๊ฐ„๊ฒฐํ•˜๋‹ค. 

-> ๊ฐ•๋ ฅํ•œ ์ถ”์ƒํ™”๋กœ ์ฝ”๋“œ ์ค‘๋ณต์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋น„์Šทํ•œ ์ž‘์—…์—์„œ ์•„์ฃผ ๋น„์Šทํ•œ ๋‘ ๊ฐœ์˜ ์ฝ”๋“œ ์กฐ๊ฐ์ด ์žˆ๋‹ค๋ฉด, ๊ณตํ†ต๋ถ€๋ถ„์€ ๋”ฐ๋กœ ํ•จ์ˆ˜๋กœ ๋ฝ‘์•„๋‚ด๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋žŒ๋‹ค์‹์œผ๋กœ ๋ถˆ๋ฆฌ๋Š” ๋ฌด๋ช… ํ•จ์ˆ˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

fun findAlice() = findPerson { it.name == "Alice" }
fun findBob() = findPerson { it.name == "Bob" }

 

  • findPerson์—๋Š” ์‚ฌ๋žŒ์„ ์ฐพ๋Š” ์ผ๋ฐ˜ ๋กœ์ง์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
  • {} ์ค‘๊ด„ํ˜ธ ์‚ฌ์ด์— ์žˆ๋Š” ์ฝ”๋“œ ๋ธ”๋ก์€ ์ฐพ์œผ๋ ค๋Š” ์‚ฌ๋žŒ์„ ์‹๋ณ„ํ•œ๋‹ค.

๐Ÿค” ๋žŒ๋‹ค์‹์ด๋ž€

์ต๋ช… ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•. ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์ด๋ฆ„์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค” ๋ฌด๋ช… ํ•จ์ˆ˜(์ต๋ช… ํ•จ์ˆ˜)๋ž€

์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜. ์ผ์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜๋œ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋‹จ์ 

๋‹จ์ˆœํ•จ์„ ๊ฐ•์š”๋ฐ›๋Š”๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ์ƒํƒœ๋Š” ๋ถ€์ž‘์šฉ(ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด๋ƒ„)์„ ๋งŒ๋“ค์ง€๋งŒ, ์™ธ๋ถ€์— ์ธํ•œ ๊ฐ์ฒด์˜ ๋ณ€ํ™”๋ฅผ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์—๋Š” ์ง๊ด€์ ์ด๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ž…์ถœ๋ ฅ์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด์„œ ์ƒํƒœ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ธฐ๋Šฅ์˜๊ตฌํ˜„์„ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ณ ๋ คํ•  ํ•„์š”์—†๋Š” ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์˜ ์กฐํ•ฉ์„ ๊ณ ์•ˆํ•ด์•ผ ํ•œ๋‹ค.

ํ•™์Šต ๊ณก์„ 

๊ฐœ๋ฐœ์ž๊ฐ€ ํ•จ์ˆ˜ํ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜์™€ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ณ  ๋” ๊ธฐ๋Šฅ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ƒ๊ฐ์„ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ์ด ์žˆ๋‹ค.