๐ŸŽ iOS & Swift

IBOutlet Collection์—ฐ๊ฒฐ ์‹œ weak ์ˆ˜์‹์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ 

taeeekki 2022. 7. 11. 01:15

0. ๋“ค์–ด๊ฐ€๋ฉฐ

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

๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ IBOutlet Collection์„ ์ด์šฉํ•ด์„œ ์ข…์ข… View๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ ๋Š” ํ–ˆ์—ˆ๋Š”๋ฐ ์™œ IBOutlet์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๋ทฐ์—๋Š” weak ์ˆ˜์‹์–ด๊ฐ€ ๋ถ™์–ด ์žˆ๊ณ , IBOutlet Collection์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๋ทฐ์—๋Š” weak ์ˆ˜์‹์–ด๊ฐ€ ๋ถ™์–ด ์žˆ์ง€ ์•Š์€์ง€ ์ƒ๊ฐํ•ด ๋ณธ ์ ์ด ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ์ƒˆ์‹น ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ์˜๋ฌธ์ด ๋“ค์–ด์„œ ์กฐ์‚ฌํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, ๋งˆ์นจ Mission ๊ณผ์ œ๋กœ ๋‚˜์™€ ์ฆ๊ฒ๊ฒŒ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


1. IBOutlet Collection ์—ฐ๊ฒฐ ์‹œ weak ์ˆ˜์‹์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ.

์šฐ๋ฆฌ๊ฐ€ IBOutlet์„ Collection ํ˜•ํƒœ๋กœ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@IBOutlet var Buttons: [UIButton]!

IBOutlet์˜ ๋ชจ์Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์‹œ๋‚˜ ์•ž์—๋Š” IBOutlet Annotation์ด ๋ถ™์–ด ์žˆ๊ณ , ํƒ€์ž…์€ UIKit Component์˜ ๋ฐฐ์—ด ํƒ€์ž…์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ๋Š”๋ฐ์š”. IBOutlet์„ ๋‹จ์ผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” weak๋ฅผ ๋ถ™์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๋ถ™์ด์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์™œ IBOutlet Collection์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” weak ์ˆ˜์‹์–ด๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†๋Š” ๊ฑธ๊นŒ์š”?


๊ทธ๋ž˜์„œ ๋ฌด์ž‘์ • weak๋ฅผ ์•ž์— ๋ถ™์—ฌ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

@IBOutlet weak var buttonList: [UIButton]!

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

weak ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์˜€์„ ๋•Œ
'weak' may only be applied to class and class-bound protocol types, not '[UIButton]'

weak ์ˆ˜์‹์–ด๋Š” Reference Count ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ˆ˜์‹์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋ฅด๋Š” ํ”„๋กœํ† ์ฝœ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋Š” UIButton์˜ ๋ฐฐ์—ด(Array)๋กœ ์„ ์–ธ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ฃ . ์™œ๋ƒํ•˜๋ฉด ๋ฐฐ์—ด(Array)๋Š” Struct ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์ ์œผ๋กœ๋Š” ๋งž์•„ ๋ณด์ด์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ•œ ๋‚ด์šฉ์ผ๊นŒ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€, ์ € ๊ธ€์„ ์ฝ๋‹ค๊ฐ€ IBOutlet Collection์ด Top-level Object(์ตœ์ƒ์œ„ ๊ฐœ์ฒด)๋ผ๋Š” ๋ง์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ตœ์ƒ์œ„ ๊ฐœ์ฒด๋Š” strongํ•˜๊ฒŒ ์ฐธ์กฐ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ Apple - Resource Programming Guide ๋ฌธ์„œ์—์„œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฌธ์žฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Outlets should generally be weak, except for those from Fileโ€™s Owner to top-level objects in a nib file (or, in iOS, a storyboard scene) which should be strong.

์•„์ง ์ •ํ™•ํ•œ ๋‹ต์€ ์ฐพ์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋งŒ์•ฝ IBOutlet Collection์ด ์ตœ์ƒ์œ„ ๊ฐœ์ฒด๊ฐ€ ๋งž๋‹ค๋ฉด, Collection์œผ๋กœ์„œ ํ•˜์œ„ ์š”์†Œ๋“ค์„ ํ™•์‹คํ•˜๊ฒŒ ์†Œ์œ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(- ์ด์Šˆ๋กœ ํ•˜์œ„ ์š”์†Œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์žƒ์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— -) ๊ฐ•ํ•œ ์ฐธ์กฐ(Strong Reference)๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ๋ผ๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์˜์‹ฌ์„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.


2. ์•„์ง ๊ฒฐ๋ก ์€ ๋‚ด๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

1) ๋‹จ์ˆœํžˆ ๋ฐฐ์—ด์ด Struct ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์—(๋ฌธ๋ฒ•์ ์ธ ์ด์œ ) weak๋ฅผ ๋ถ™์ด์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?
2) ์ตœ์ƒ์œ„ ๊ฐœ์ฒด(Top-level Object)๋กœ์„œ ํ•˜์œ„ ์š”์†Œ์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์„ ์ฆ๋ช…ํ•˜๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํ• ๋‹น ํ•ด์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ•ํ•œ ์ฐธ์กฐ์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?


3. ์ •๋ฆฌ

๋ฌธ๋ฒ•์ ์ธ ์ด์œ ์— ์ง‘์ค‘์„ ์ข€ ๋” ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

weak ์ˆ˜์‹์–ด๋Š” ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด ์ฐธ์กฐ ํƒ€์ž…์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๊ตฌ์กฐ์ฒด(Struct)ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์—, weak ์ˆ˜์‹์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์ฃ . ํด๋ž˜์Šค ํƒ€์ž…์˜ ์š”์†Œ๊ฐ€ ๊ตฌ์กฐ์ฒด ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋”๋ผ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜ ์ด์œ ๋กœ weak ์ˆ˜์‹์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.