๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/๐Ÿ“– ๊ฐœ๋…

[ํŒจ๋Ÿฌ๋‹ค์ž„] ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

by MINT09 2024. 10. 23.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ, ๋ฏผํŠธ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ˆ

WWDC Swift Macro๋ฅผ ๋ณด๋‹ค ๋ณด๋‹ˆ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•์„ ๋งŽ์ด ์‚ด๋ฆฐ ๊ฒƒ ๊ฐ™์•„์„œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

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

Random ํ•จ์ˆ˜๋Š” ์ ˆ๋Œ€ ์ˆœ์ˆ˜ํ•  ์ˆ˜ ์—†๋‹ค.

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

๋ชจ๋“  ํ•จ์ˆ˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. 

์šฐ๋ฆฌ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†๋Š” Void์— ๋Œ€ํ•ด ๋‹ค๋“ค ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜์˜ ๋Œ€์ „์ œ๋Š” X -> Y ์ด๋‹ค. input ์ด ์žˆ๋Š”๋ฐ ouput ์ด ์—†์œผ๋ฉด ํ•จ์ˆ˜๋กœ ์ธ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”? ์•ž์„œ ๋งํ–ˆ๋“ฏ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ถˆ๋ณ€์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์œผ๋ฉด ๋ถˆ๋ณ€์„ฑ์— ๋Œ€ํ•ด์„œ ์•„์˜ˆ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๊ฐ’์ด mutable ํ•œ์ง€ immutable ํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†์–ด ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ํ™•์ธ์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์€ ๋˜์—ˆ์ง€๋งŒ ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋‹ค๋ฉด, ๋‚ด๋ถ€์—์„œ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ํ•˜์˜€๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ์— ์–ด๋”˜๊ฐ€๋Š” ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ์„ ๊ฒƒ์ด๊ณ  ์ด๋Š” ๊ฒฐ๊ตญ Side Effect๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋Š”, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์˜จ์ „ํ•˜๊ฒŒ ์ง€ํ‚ค์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  SideEffect๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ชจ๋“ˆํ™”์™€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ•˜๊ธฐ๊ฐ€ ๋” ํŽธํ•  ๊ฒƒ์ด๊ณ , ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. 

๋ถˆ๋ณ€ ๊ฐ’์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

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

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

์Šค์œ„ํ”„ํŠธ๋Š” ๊ณ ์ฐจํ•จ์ˆ˜, ํด๋กœ์ € ๋“ฑ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. iOS, macOS ๋“ฑ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ๋งŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ง€ํ–ฅ์ด๋‚˜ ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ•จ๊ป˜ ๊ณต์กดํ•˜๋Š” ํ˜•ํƒœ๋กœ ํ”„๋กœ์ ํŠธ์— ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

'๐ŸŽ iOS > ๐Ÿ“– ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Network] TLS/SSL  (1) 2024.10.28
[iOS]Unit Test์˜ ์‚ฌ์šฉ  (0) 2024.02.05
[๋””์ž์ธ ํŒจํ„ด]Delegate Pattern  (2) 2024.01.27
[๋””์ž์ธ ํŒจํ„ด]Observer Pattern  (1) 2024.01.27