-
Memberwise Initializer - InitializeriOS/๐ Swift 2021. 1. 5. 13:30
" ๊ตฌ์กฐ์ฒด์๋ง ํน๋ณํ ์ ๊ณต๋๋ ์ด๋์ ๋ผ์ด์ "
Struct ์๋ง ํน๋ณํ ์ ๊ณต๋๋ Initializer๊ฐ ์์ต๋๋ค.
์ด Initializer๋ ์ด๊ธฐํ ์์ ์์ ์์ ๊ฐ๋ฅํ ์์ฑ์ ํํ์ฌ, Argument๋ก ์ ๊ณตํฉ๋๋ค.
์ ์ธ ์์ ๊ณผ ์ด๊ธฐํ ์์ ์ ๊ตฌ๋ถํด์ ์๊ฐํด๋ณด๋ฉด, ์ ๋ฌธ์ฅ์ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
๊ฐ๋ฅํ ๋ชจ๋ Member๋ฅผ ์ด๊ธฐํํ ์ ์๊ฒ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์์ Memberwise Initializer๋ก ๋ช ๋ช ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Parameter ๋ชฉ๋ก์ ์ถ๊ฐ๋์ง ์์ ๊ฒฝ์ฐ๋, let ์ผ๋ก ๊ธฐ๋ณธ ๊ฐ์ด ์ ์ธ๋ ์ ์ฅ์์ฑ์ผ ๊ฒฝ์ฐ์ ๋๋ค.
let์ผ๋ก ์ง์ ํ๋ฉด ๊ฐ์ด ํ๋ฒ ์ ์ธ๋ ์ดํ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก let์ด์ง๋ง ๊ธฐ๋ณธ ๊ฐ์ ์ ์ธ๋์ง ์์๋ค๋ฉด, ์ด๊ธฐํ ์์ ์์ ์ฒ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด๋ฏ๋ก Parameter์ ์ถ๊ฐ๋์ด ์ ๊ณต๋ฉ๋๋ค.
Code
์ดํด๋ฅผ ๋๊ธฐ ์ํด, ๋ค์ํ ์ํฉ์ ์ฝ๋์ ๋ด์๋ณด์์ต๋๋ค.
/* ๋ชจ๋ ์ ์ฅ ์์ฑ์ ๊ธฐ๋ณธ ๊ฐ์ด ์๋ Test0 */ struct Test0 { var var1 = 0 var var2 = 0 } /* ํ๋์ ์์ฑ๋ง ๊ธฐ๋ณธ ๊ฐ์ด ์๋ Test1 */ struct Test1 { var var1: Int = 0 var var2: Int } /* ๋ชจ๋ ์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ Test2 */ struct Test2 { var var1: Int var var2: Int } /* 1. var ์ let ์ ํ์ธํด์ฃผ์ธ์ */ /* 2. ๊ธฐ๋ณธ ๊ฐ์ ์ ๋ฌด ๋ฅผ ํ์ธํด์ฃผ์ธ์ */ struct Test3 { let let1: Int let let2 = 0 var var1: Int } /* Default Initializer์ Memberwise Initializer ์ ๊ณต */ Test0() Test0(var1: 1, var2: 2) /* ๊ธฐ๋ณธ Memberwise ์ธ์ ๊ธฐ๋ณธ ๊ฐ์ด ์๋ ์์ฑ๋ง ์ด๊ธฐํํ ์ ์๋ Initializer ์ ๊ณต */ Test1(var1: 1, var2: 2) Test1(var2: 2) /* ๊ธฐ๋ณธ ๊ฐ์ด ๋ชจ๋ ์๋ ๊ฒฝ์ฐ */ Test2(var1: 1, var2: 2) /* ๊ธฐ๋ณธ ๊ฐ์ด ์๋ let ๋ง Argument ๋ก ์ ๊ณต๋จ */ Test3(let1: 1, var1: 1)
ํน์ง
Default Initializer์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ฐ๋ฐ์๊ฐ Initializer๋ฅผ ์ง์ ์์ฑํ๋ค๋ฉด Memberwise Initializer๋ ์ ๊ณต๋์ง ์์ต๋๋ค.
์ง์ ์์ฑํ Initializer์ Memberwise Initializer ๋ฅผ ๋ชจ๋ ์ฐ๊ณ ์ถ๋ค๋ฉด extension์ ๊ฐ๋ฐ์ ์ ์ initializer๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
struct Test { var var1 = 0 var var2 = 0 } extension Test { init(value: Int) { var1 = value var2 = value } }
๋!
'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋กํ ์ฝ ๊ฐ์ (Protocol Overview) (0) 2021.01.15 Closure Capture List - Memory (0) 2021.01.05 Initializers - Initializer (0) 2021.01.05 Strong Reference Cycle - Memory (0) 2021.01.03 Weak Reference - Memory (0) 2021.01.02