IBOutlet Collection์ฐ๊ฒฐ ์ weak ์์์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์
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' 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 ์์์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.