iOS ์•ฑ ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜/TIL

3์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ•์ข…ํ•ฉ๋ฐ˜ ์‹ฌํ™”_(2์ผ์ฐจ)_ํด๋กœ์ € & ๊ณ ์ฐจํ•จ์ˆ˜

yeggrrr๐Ÿผ 2024. 3. 12. 21:14


<TIL>
์˜ค๋Š˜์€ ์‹ฌํ™” ๊ฐ•์˜๋ฅผ ๋‹ค ๋“ค์—ˆ๋Š”๋ฐ, ์—ญ์‹œ๋‚˜ ๋ฉ˜๋ถ•..๐Ÿคฏ
ํ›… ์–ด๋ ค์›Œ์ง„ ๋Š๋‚Œ..? 
๊ทธ๋ž˜๋„ ์–ด์ œ ์ดํ•ด ์•ˆ ๋œ ํด๋กœ์ €๊ฐ€ ์˜ค๋Š˜์€ ๊ท€์— ์ข€ ๋“ค์–ด์™€์„œ ๋‹คํ–‰์ด์—ˆ๋‹ค.
์—ญ์‹œ ๋ฌด์ง€์„ฑ์œผ๋กœ ๊ณ„์† ๋ณด๋ฉด ์ข€ ๋‚˜์•„์ง€๋Š” ๊ฒƒ ๊ฐ™์€..ใ…Žใ…Žใ…Ž

์•„๋ฌดํŠผ ์ „๋ถ€ ์ •๋ฆฌํ•˜๋ ค๋ฉด ๋„ˆ๋ฌด ๋งŽ๊ธฐ๋„ ํ•˜๊ณ , ์•„์ง ์ดํ•ด ์•ˆ ๋œ ๋ถ€๋ถ„๋“ค๋„ ์žˆ์–ด์„œ
์ด๋ฒˆ TIL ๊ฒŒ์‹œ๊ธ€์—๋Š”
ํด๋กœ์ €์™€ ๊ณ ์ฐจ ํ•จ์ˆ˜๋ฅผ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค!

๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ๊ฐœ์ธ๊ณผ์ œ '์•ผ๊ตฌ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ' ์‹œ์ž‘ํ•ด์•ผ ํ•ด์„œ
์ •์‹ ์—†์„ ์˜ˆ์ •์ด๋‹ค..^^..



ํด๋กœ์ €
(Closure)

ํด๋กœ์ €๋Š” ์ด๋ฆ„์—†๋Š” ํ•จ์ˆ˜(์ต๋ช…ํ•จ์ˆ˜)
์ฆ‰, ์ฝ”๋“œ ๋ธ”๋ก์„ ๋งํ•œ๋‹ค.

๊ทธ์น˜๋งŒ, ์ง€๊ธˆ๊นŒ์ง€ ๊ณ„์† ์‚ฌ์šฉํ•ด์™”๋˜
func ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฆ„์„ ๋ถ™์—ฌ์ค€ ํ•จ์ˆ˜๋“ค๋„ ๋ชจ๋‘ ํด๋กœ์ €์ด๋‹ค!

์ด์ฒ˜๋Ÿผ ํด๋กœ์ €(Closure)๋Š” ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
โ‘  Named Closure
โ‘ก Unnamed Closure

๋ฐฉ๊ธˆ ์œ„์—์„œ ๋งํ•œ func ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฆ„์„ ๋ถ™์ธ ํ•จ์ˆ˜๋“ค์ด
๋ฐ”๋กœ 'Named Closure'์ด๋‹ค.
๊ทธ์น˜๋งŒ ํด๋กœ์ €๋ผ ๋ถ€๋ฅด์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ ํ•จ์ˆ˜๋ผ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋‹ค!

๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ์ •๋ฆฌํ•  ์ด๋ฆ„์„ ๋ถ™์ด์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜
'Unnamed Closure'
(๋ณดํ†ต ๊ทธ๋ƒฅ ํด๋กœ์ €(Closure)๋ผ๊ณ  ๋ถ€๋ฆ„)
์ด ํ•จ์ˆ˜๋ฅผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.๐Ÿ˜ฒ


ํด๋กœ์ €๋Š” ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์บก์ณ(capture)ํ•˜์—ฌ ์ €์žฅํ•˜๊ณ ,
์ด๋ฅผ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

โ‘  ๊ฐ’(value) ์บก์ณ 
- ๊ฐ’ ํƒ€์ž…์„ ์บก์ณํ•˜๋“  ์ฐธ์กฐ ํƒ€์ž…์„ ์บก์ณํ•˜๋“  ์ฐธ์กฐ(reference) ์บก์ณ๊ฐ€ ๋จ



โ‘ก ์ฐธ์กฐ(reference) ์บก์ณ
- ๋ณ€์ˆ˜ or ์ƒ์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์บก์ณ
- ํด๋กœ์ € ๋‚ด์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋จ


โ–ท ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  โ—
- ๊ธฐ๋Šฅ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

- ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ด๋‹ค.
(๋ฐ˜๋“œ์‹œ ๋น„๋™๊ธฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜)


โ–ท ํด๋กœ์ €์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ โ—
- ํด๋กœ์ €๋ฅผ ๋งŒ๋“ค ๋•Œ, ์ด๋ฆ„์ด๋‚˜ ๊ณต๋ฐฑ์ด ์—†๋‹ค.

- ํด๋กœ์ €์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” { } ์•ˆ์— ๋‚˜์—ดํ•œ๋‹ค.

- ํด๋กœ์ €๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„๋“ค์ด๊ฒŒ ํ•˜๋ ค๋ฉด { } ๋ฐ”๋กœ ๋’ค ( ) ์•ˆ์— ๋‚˜์—ดํ•œ ๋‹ค์Œ์—
in ์„ ์ž‘์„ฑํ•˜์—ฌ ํด๋กœ์ €๊ฐ€ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

- ํ•จ์ˆ˜์™€ ํด๋กœ์ €์˜ ์ฐจ์ด๋Š” ํด๋กœ์ €๋ฅผ ์‹คํ–‰ํ•  ๋•Œ
๋ณ€์ˆ˜๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

ํ•จ์ˆ˜์™€ ํด๋กœ์ €์˜ ์ฐจ์ด


<์˜ˆ์‹œ 1>


<์˜ˆ์‹œ 2>


<์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•>


<ํ™œ์šฉ>


ํƒˆ์ถœ ํด๋กœ์ €
(Escaping Closure)

โ‘  ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ํด๋กœ์ €(ํ•จ์ˆ˜)๋ฅผ ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ

โ‘ก ํด๋กœ์ €๊ฐ€ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋์„ ๋•Œ,
๋ฉ”์„œ๋“œ์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋˜๋Š” ํด๋กœ์ €์ž„. (๋น„๋™๊ธฐ)

โ‘ข ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์•ž์— @escaping ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๋ช…์‹œํ•ด์•ผํ•จ.

๐Ÿ’ก
@escaping์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋กœ์ €์—์„œ self์˜ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š”

self๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์–ธ๊ธ‰ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.


๊ณ ์ฐจํ•จ์ˆ˜
(map, filter, reduce)

 


 

โ—† map โ—†


โœ”๏ธ map์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
โœ”๏ธ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜์—ฌ ์ƒˆ๋กœ์šด  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋Š” ๋ณ€ํ˜•๋˜์ง€ ์•Š๋Š”๋‹ค.

map์€ ๊ธฐ์กด์˜ for-in ๊ตฌ๋ฌธ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์ ์ด ์žˆ๋‹ค.
โ‘  ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๋‹ค.
โ‘ก ์žฌ์‚ฌ์šฉ์— ์šฉ์ดํ•˜๋‹ค.
โ‘ข ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.

์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด ์งˆ ์ˆ˜ ์žˆ๋‹ค.
์ง€๊ธˆ์€ ์งง์€ ์ฝ”๋“œ๋ผ ํฐ ์ฐจ์ด๊ฐ€ ๋Š๊ปด์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ,

๋” ๋งŽ์€ ์—ฐ์‚ฐ๊ณผ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์ด ๋”ํ•ด์ ธ ์ฝ”๋“œ๊ฐ€ ์ ์  ๋ณต์žกํ•ด์ง€๊ณ  ๊ธธ์–ด์ง€๊ฒŒ ๋˜๋ฉด ํ™• ๋Š๊ปด์งˆ ๊ฒƒ์ด๋‹ค!


โ—† filter โ—†


โœ”๏ธ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์˜์˜ ์š”์†Œ ์ค‘ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 


โ—† reduce โ—†


โœ”๏ธ ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์˜ํ•œ ํด๋กœ์ €๋กœ ๋งคํ•‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


 

728x90