์ด์ „ ๊ธ€์—์„œ ์ดˆ๊ธฐํ™”๋ฅผ ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ๊ณผ์ •์—์„œ Two Phase Initialization์ด๋ผ๋Š” ์ƒ์†Œํ•œ ๋‹จ์–ด๋ฅผ ๋ณด์•˜๋‹ค๋ฉด ์ž˜ ์™”๋‹ค. Swift๋Š” ์ƒ์† ๊ณผ์ •์—์„œ ๋ชจ๋“  instance์˜ property์˜ ๊ฐ’์ด ๋ณด์žฅ๋˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ 2๋‹จ๊ณ„ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ์‹œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ–ˆ์œผ๋‹ˆ ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ๋ณ„ ๊ฒƒ ์—†์œผ๋‹ˆ ๊ฒ๋จน์ง€ ๋ง์ž. ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ชจ๋“  property์˜ ์ดˆ๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘๊ณ  ๊ธ€์„ ์ฝ์ž. ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณด์ž.

์ดˆ๊ธฐํ™” ํ˜ธ์ถœ๊ณผ์ • ๋”ฐ๋ผ๊ฐ€๊ธฐ

class drink {
    var size: String
    
    init() {
//        self.describe() // ๋‚ด๋ถ€ ์†์„ฑ์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๋ถˆ๊ฐ€
        self.size = "Tall"
        self.describe()
        print("2๋‹จ๊ณ„")
        print("self ๊ฐ€๋Šฅ")
    }
    
    func describe() {
        print("Drink!")
    }
}
 
class Coffee: drink {
    var price: Int
    
    override init() { // ์—ญํ•  : ํ•ด๋‹น ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์†์„ฑ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌ
        // ๊ทธ๋ž˜์„œ init์„ ๋จผ์ € ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋จ..
        self.price = 5700
        super.init()
        self.size = "sdgsd"
    }
    
    convenience init(size: String, price: Int) {
        print("1๋‹จ๊ณ„ ์‹œ์ž‘")
        print("self ๋ถˆ๊ฐ€๋Šฅ")
        self.init() // ์ˆœ์„œ ๋ฐ”๊พธ๋ฉด ์ž‘๋™ ์•ˆํ•จ : ์ง€์ • ์ƒ์„ฑ์ž๋ฅผ ๋จผ์ € ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€์•ผ self ์ ‘๊ทผ ๊ฐ€๋Šฅ..
        self.size = size
        self.price = price
    }
}
 
let coffee = Coffee(size: "tall", price: 5600)

ํ˜ธ์ถœ๋˜๋Š” ๊ณผ์ •์„ ๋”ฐ๋ผ๊ฐ€ ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

  • 1๋‹จ๊ณ„
    • coffee ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
      • convinience ์ƒ์„ฑ์ž์ด๋ฏ€๋กœ, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์ง€์ • ์ƒ์„ฑ์ž๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•œ๋‹ค.
        • ์ด ๋‹จ๊ณ„์—์„œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ
    • coffee์˜ ์ง€์ • ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
      • ์ง€์ • ์ƒ์„ฑ์ž๋Š” ๋จผ์ €, ์ž๊ธฐ ์ž์‹ ๋งŒ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” property๋ฅผ ๋จผ์ € ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
        • ์ด ๋‹จ๊ณ„์—์„œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ
      • super ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ
    • ์ƒ์œ„ ํด๋ž˜์Šค(drink)์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
      • ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ๋Š” ๋˜, ์ž๊ธฐ ์ž์‹ ๋งŒ์ด ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
        • ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น ๋ฐ›๋Š”๋‹ค.
      • ์ด ๋‹จ๊ณ„์—์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค(์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ง‰์•„๋‘ )
        • ์ด ์ด์œ ๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ์„ธํŒ…๋œ ์ƒํƒœ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์€ ๋ฐฉํ–ฅ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ๋ชจ๋“  ์ƒ์„ฑ์ž์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
  • 2๋‹จ๊ณ„
    • ์ด์ œ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜์–ด ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค์—์„œ self๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋‹ค์‹œ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ž‘์—… ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
    • coffee ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ ์ด์ œ ์ง€์ • ์ƒ์„ฑ์ž์—์„œ size๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹ค์Œ์œผ๋กœ ํŽธ์˜ ์ƒ์„ฑ์ž์—์„œ coffee์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” break point๋ฅผ ๊ฑธ๊ณ  debugger์—์„œ po self์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทœ์น™

์œ„์˜ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์•ž์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ทœ์น™์€ ์‚ฌ์‹ค ๋‹น์—ฐํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ง€์ • ์ƒ์„ฑ์ž์—์„œ๋Š” ํ˜„์žฌ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ€์ง„ ํ›„์— super.init์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. : ์•ˆ์ „์„ฑ ์ฒดํฌ๋ฅผ ์œ„ํ•จ ์ธ๋“ฏ. ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋จผ์ € ์ž˜ํ•œ๋‹ค์Œ์— ์ƒ์œ„๋กœ ๊ฐ€์ž ์ด๋Ÿฐ ์˜๋ฏธ
  • ํ•˜์œ„ ํด๋ž˜์Šค โ†’ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง: ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง
  • ๋งˆ์ง€๋ง‰์€ ์ตœ์ƒ๋‹จ ํด๋ž˜์Šค์—์„œ ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง
  • ์ฆ‰, ์„œ๋ธŒํด๋ž˜์Šค์˜ ํฌ๊ธฐ๋Š” super ํด๋ž˜์Šค๋กœ ๊ฐ€๊ธฐ์ „์— ์•Œ๊ณ  ์žˆ์Œ
  1. ์ง€์ • ์ƒ์„ฑ์ž๋Š” ์ƒ์† ๋ฐ›์€ property๊ฐ’์„ ๋„ฃ๊ธฐ์ „์— super class init์„ ํ˜ธ์ถœํ•ด์•ผ ํ•จ
  • ๋ณด๋ฉด, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜์˜์ด ์•ˆ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ
  1. ํŽธ์˜ ์ƒ์„ฑ์ž์—์„œ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์ „์—, ์ง€์ • ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•จ
  • ์ด๊ฒƒ๋„ ์›๋ฆฌ์ƒ์œผ๋กœ ๋ณด๋ฉด, designated๋กœ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ. ์™œ๋ƒ๋ฉด ์ดˆ๊ธฐํ™”๊ฐ€ ์•ˆ๋˜์–ด ์žˆ์œผ๋‹ˆ๊นŒ
  1. 1๋‹จ๊ณ„๊ฐ€ ๋๋‚˜๊ธฐ ์ „์— ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ init์„ ํ•œ๋’ค์— ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ์“ฐ๋ ˆ๊ธฐ๊ฐ’์„ ๋ฑ‰์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฒฐ๋ก 

  • 1๋‹จ๊ณ„: designated ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค.
    • ์ด ๊ณผ์ •์—์„œ subclass โ†’ superclass๋กœ ์ด๋™ํ•˜๋ฉฐ,
    • subclass์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋ฌด์กฐ๊ฑด ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
    • super ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’๋„ ๋ชจ๋‘ ์ดˆ๊ธฐํ™”๊ฐ€ ๋œ๋‹ค.
    • ์ฆ‰ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋ชจ๋‘ initํ•˜๋Š” ๊ณผ์ •์ž„
  • 2๋‹จ๊ณ„: ์ƒ์œ„, ํ˜น์€ subclass์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ๊ฐ’์— ์ ‘๊ทผํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
    • ์ด์ œ์•ผ self์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ ‘๊ทผํ•œ ์ƒํƒœ์—์„œ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

์‚ฌ์šฉ ์ด์œ 

  • ์•ˆ์ „ํ•˜๊ฒŒ init๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด์ธ๋‹ค.
  • ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹นํ•˜๊ณ  ์œ„๋กœ ๋ณด๋ƒ„
  • ์ด ๋ฐฉ์‹์œผ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ์ƒ์œ„๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๊ณ , ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋จ
  • ๋ณด์žฅ๋œ ํ›„์— self๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ์ž˜๋ชป๋œ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•จ

Reference