ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Memberwise Initializer - Initializer
    iOS/๐ŸŸ  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
        }
    }

     

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

     

     

     

     

    ๋!


     

     

     

     

    '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

    ๋Œ“๊ธ€

์–ด์ œ๋ณด๋‹ค ๋ฐœ์ „ํ•œ ๋‚˜