iOS/๐ŸŸ  Swift

Memberwise Initializer - Initializer

woozzang 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
    }
}

 

Memberwise Initializer ์™€ ๊ฐœ๋ฐœ์ž ์ •์˜ Initializer ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋!