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

3๏ธโƒฃ Swift/Swift ์ •๋ฆฌ20

[Swift] ARC (2); ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, Retain Cycle ์ €๋ฒˆ ๊ธ€์—์„œ๋Š” ARC์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋Š”๋ฐ, ์˜ค๋Š˜์€ ARC๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ณ  ๊ทธ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ˜„์ƒ์ด๋‹ค. iOS์•ฑ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์Œ“์ด๊ฒŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๊ณ , ๊ฒฐ๊ตญ์—” ์•ฑ์„ ์ฃฝ์ผ ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์›์ธ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž. ๐Ÿ“Ž ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐœ์ƒ ์›์ธ - Retain Cycle (๊ฐ•ํ•œ์ฐธ์กฐ ์ˆœํ™˜) ์ €๋ฒˆ ๊ธ€์—์„œ ๋งํ–ˆ๋“ฏ swift์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋Š” ARC๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๊ณ , ARC๋Š” ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํ•œ ๋•Œ์— ํ•ด์ œ์‹œ์ผœ์ค€๋‹ค. ์ฐธ์กฐ์˜ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ํด๋ž˜์Šค ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ๋“ฑ์„ ์„ ์–ธ.. 2021. 10. 4.
[Swift] ARC (1); ARC์˜ ๊ฐœ๋…, Retain Count ์˜ค๋Š˜์€ ARC์— ๋Œ€ํ•ด ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๋ คํ•œ๋‹ค. iOS ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ๋“ค์–ด๋ณด๊ธฐ๋Š” ๋งŽ์ด ๋“ค์–ด๋ดค๋Š”๋ฐ,, ์ด์ œ์„œ์•ผ ๊ณต๋ถ€๋ฅผ ํ•˜๋Š”๊ทœ๋‚˜ ๐Ÿ“Ž ARC (Auto Reference Counting) ์ด๋Ÿฐ ๊ฐœ๋… ์šฉ์–ด๋“ค์€ ์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๋“ฏ ์ด๋ฆ„์— ๋ชจ๋“  ๊ฒƒ์ด,,! ๋ง ๊ทธ๋Œ€๋กœ '์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ…'์ด๋‹ค. ํ•œ ๋‹จ์–ด์”ฉ ๋ณด๋ฉด, ์šฐ์„  ์ฐธ์กฐ๋ฅผ ์นด์šดํŒ…ํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ? ๐Ÿ‘‰ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•จ์ผ๋“ฏ ๊ทธ๋Ÿผ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•œ๋‹ค? ๐Ÿ‘‰ ํŽธ๋ฆฌํ•˜๊ฒŒ, ์˜ค๋ฅ˜๋ฅผ ์ ๊ฒŒ! ํ•˜๊ธฐ ์œ„ํ•จ์ผ๋“ฏ ์ด๋ ‡๊ฒŒ ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ ARC๋Š” ํšจ๊ณผ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. + ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ์•ฑ์˜ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ธ๋ฐ, ๋ฉ”๋ชจ๋ฆฌ๋ผ๊ณ  ํ•˜๋ฉด ํฌ๊ฒŒ ์Šคํƒ ์˜์—ญ, ํž™ ์˜์—ญ ๋“ฑ์ด ์žˆ๋‹ค. ์ด ์ค‘ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ.. 2021. 9. 23.
[Swift] ํ”„๋กœํผํ‹ฐ ๊ฐœ๋… ์ •๋ฆฌ (3); ํƒ€์ž… ํ”„๋กœํผํ‹ฐ ์ด์ œ ํ”„๋กœํผํ‹ฐ ๋งˆ์ง€๋ง‰ ์ข…๋ฅ˜์ธ ํƒ€์ž… ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์ €์žฅ ํ”„๋กœํผํ‹ฐ, ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์— ํฌํ•จ๋˜๋Š” ๋‚ด์šฉ์œผ๋กœ ๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค. ๐Ÿ“Ž ํƒ€์ž… ํ”„๋กœํผํ‹ฐ (Type Properties) ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋Š” ์•ž์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ, ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์— static๋งŒ ๋ถ™์ด๋ฉด ๋! ์ง€๊ธˆ๊นŒ์ง€ ๊ณต๋ถ€ํ•œ ํ”„๋กœํผํ‹ฐ๋“ค์€ ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ , ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ผ์ข…์˜ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ™์€ ๊ฐœ๋….๐Ÿ’ฅ ํ•˜์ง€๋งŒ ์ด ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํƒ€์ž… ์ž์ฒด์—! ์†ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์ด๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด ํƒ€์ž… ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์€ ๋”ฑ ํ•˜๋‚˜๋ฟ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ•˜๋‚˜๋ฟ์ธ ๊ฐ’์€ ๊ทธ ํƒ€์ž…์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์ด๋‚˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์—์„œ.. 2021. 9. 22.
[Swift] ํ”„๋กœํผํ‹ฐ ๊ฐœ๋… ์ •๋ฆฌ (2); ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ ์ €๋ฒˆ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ์˜ค๋Š˜์€ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค,, ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ๋ณ€์ˆ˜, ์ƒ์ˆ˜์— ๋Œ€ํ•œ ๊ฐœ๋…์œผ๋กœ ๊ทธ๋‚˜๋งˆ ์‰ฌ์šด? ํŽธ์ด์—ˆ๋Š”๋ฐ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋Š” ๋น„๊ต์  ์–ด๋ ค์› ๋‹น. ๊ฐ™์ด ๊ณต๋ถ€ํ•ด๋ณด์Ÿˆ.. ๐Ÿ“Ž ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ (Computed Properties) ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ €์žฅ ํ”„๋กœํผํ‹ฐ์™€ ๋‹ฌ๋ฆฌ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์—ฐ์‚ฐ์„ ํ•˜๊ณ  ์ ์ ˆํ•œ ๊ฐ’์„ ๋Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค, ์—ด๊ฑฐํ˜• ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ์ ‘๊ทผ์ž(getter), ์„ค์ •์ž(setter)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์–ด๋– ํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์—ฐ์‚ฐ, ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋ถ€๋ถ„์—์„œ ๋ฉ”์„œ๋“œ์™€ ๋น„์Šทํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์ด ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ ์„ ์•Œ์•„๋ณด๋ฉด, 1) ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ ์œ„์—์„œ ๋งํ•œ .. 2021. 9. 22.
[Swift] ํ”„๋กœํผํ‹ฐ ๊ฐœ๋… ์ •๋ฆฌ (1); ์ €์žฅ ํ”„๋กœํผํ‹ฐ ํ”„๋กœํผํ‹ฐ๋ผ๊ณ  ํ•˜๋ฉด ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด์—์„œ ์“ฐ๋Š” ๋ณ€์ˆ˜, ์ƒ์ˆ˜,,? ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์ด์ง€๋งŒ ์ •ํ™•ํžˆ ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.ใ…œ ์ถ”์„์„ ๋งž์•„ ์ด๋Ÿฐ ๊ฐœ๋…๋“ค์„ ํƒ„ํƒ„ํžˆํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ คํ•œ๋‹ค.๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ํ”„๋กœํผํ‹ฐ๋Š” ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋“ฑ์— ๊ด€๋ จ๋œ ๊ฐ’์„ ๋œปํ•˜๊ณ , ๊ทธ ์ข…๋ฅ˜๋Š” ์ €์žฅ ํ”„๋กœํผํ‹ฐ, ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ, ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋กœ ํฌ๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“Ž ์ €์žฅ ํ”„๋กœํผํ‹ฐ (Stored Properties) ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด์—์„œ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ”„๋กœํผํ‹ฐ์ด๋‹ค. ๐Ÿ“Œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. struct Info1_sp { let name: String = "์„คํฌ" // ์ƒ์ˆ˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ var age: Int = 0 // ๋ณ€์ˆ˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ } clas.. 2021. 9. 22.