Memberwise Initializer - Initializer
" ๊ตฌ์กฐ์ฒด์๋ง ํน๋ณํ ์ ๊ณต๋๋ ์ด๋์ ๋ผ์ด์ "
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
}
}
๋!