πŸ‘©πŸ»‍πŸ’» iOSun
article thumbnail

 

 

  • ν΄λž˜μŠ€λŠ” ꡬ쑰체와 λ‹€λ₯΄κ²Œ λ©€λ²„μ™€μ΄μ¦ˆ μ΄λ‹ˆμ…œλΌμ΄μ €κ°€ μ—†μŒ
  • ν•„μˆ˜λ‘œ κ΅¬ν˜„ν•΄μ•Ό 함

 

지정 μƒμ„±μž(Designated Initializer)

class Anmimal {
    let name: String
    let age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
  • λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό μ™„λ²½ν•˜κ²Œ μ΄ˆκΈ°ν™”ν•¨
    • μ˜΅μ…”λ„ ν”„λ‘œνΌν‹°μ΄κ±°λ‚˜ 기본값을 가진 ν”„λ‘œνΌν‹°λŠ” μ˜ˆμ™Έ
  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” 적어도 1개 μ΄μƒμ˜ 지정 μƒμ„±μžλ₯Ό 가짐

  • λ°˜λ“œμ‹œ μžμ‹ 클래슀의 지정 μƒμ„±μžλŠ” λΆ€λͺ¨ 클래슀의 지정 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό 함

 

편의 μƒμ„±μž (Convenience Initializers)

class Anmimal {
    let name: String
    let age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    convenience init(name: String) {
        self.init(name: name, age: 0)
    }
    
}
  • 지정 μƒμ„±μžλ₯Ό νŽΈλ¦¬ν•˜κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” 즉 λ„μ™€μ£ΌλŠ” μƒμ„±μž
  • λ°˜λ“œμ‹œ 같은 ν΄λž˜μŠ€μ— μžˆλŠ” 지정 μƒμ„±μž or 편의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό 함

 

 

  • 편의 μƒμ„±μžλŠ” 같은 클래슀 λ‚΄μ˜ μƒμ„±μžλ§Œ ν˜ΈμΆœν•œλ‹€.
  • 지정 μƒμ„±μžλŠ” λΆ€λͺ¨ 클래슀의 지정 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€.

 

2단계 μ΄ˆκΈ°ν™” (Two-Phase Initialization)

  • 클래슀의 μ΄ˆκΈ°ν™”λŠ” 2단계λ₯Ό κ±°μΉœλ‹€.

1단계

  • μ΄ˆκΈ°ν™” → λͺ¨λ“  ν”„λ‘œνΌν‹°κ°€ μ΄ˆκΈ°κ°’μ„ κ°€μ Έμ•Ό ν•œλ‹€.
  1. ν˜„μž¬ 클래슀의 ν”„λ‘œνΌν‹°λ₯Ό λͺ¨λ‘ μ΄ˆκΈ°ν™”ν•œλ‹€.
  2. 그리고 super.init으둜 타고 μ˜¬λΌκ°€μ„œ λΆ€λͺ¨ 클래슀의 ν”„λ‘œνΌν‹°λ„ λͺ¨λ‘ μ΄ˆκΈ°ν™”ν•œλ‹€. (μ΅œμƒμœ„ μ²΄μΈκΉŒμ§€ 올라감)
  3. κ°€μž₯ μœ„μ— μžˆλŠ” 클래슀의 ν”„λ‘œνΌν‹°κ°€ λͺ¨λ‘ μ΄ˆκΈ°ν™” 됐닀고 νŒλ‹¨λ˜λ©΄ 1단계 μ’…λ£Œ
  4. 1단계가 μ’…λ£Œλ˜λ©΄ μΈμŠ€ν„΄μŠ€μ˜ λ©”λͺ¨λ¦¬κ°€ μ™„μ „νžˆ μ΄ˆκΈ°ν™” 됨 (이제 ν”„λ‘œνΌν‹° 읽고 μ“°κΈ° κ°€λŠ₯)

 

2단계

  • μ΄ˆκΈ°ν™” 이후 μž‘μ—… 진행
  • λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μ΄ˆκΈ°ν™”ν–ˆλ˜ 값을 λ³€κ²½ν•˜λŠ” μž‘μ—…

 

  • μ—λŸ¬κ°€ λœ¨λŠ” 이유
    • 1단계 μ΄ˆκΈ°ν™”κ°€ λλ‚˜μ§€ μ•Šμ•„ μΈμŠ€ν„΄μŠ€κ°€ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

μ΄ˆκΈ°ν™” ꡬ문 상속과 μž¬μ •μ˜ (Initializer Inheritance and Overriding)

  • 기본적으둜 λΆ€λͺ¨ 클래슀의 μ΄ˆκΈ°ν™”λŠ” μƒμ†λ˜μ§€ μ•ŠμŒ

μƒμ†λ˜λŠ” 경우

  1. μžμ‹ 클래슀의 ν”„λ‘œνΌν‹°κ°€ λͺ¨λ‘ 이미 μ΄ˆκΈ°ν™” λ˜μ–΄ μžˆμ–΄ 지정 μ΄ˆκΈ°ν™”κ°€ μ—†λŠ” 경우
class Human {
    var name: String
    
    init(name: String) {
        self.name = name
    }
}
 
class Sodeul: Human {

    // 1. μ„œλΈŒ 클래슀의 λͺ¨λ“  속성이 κΈ°λ³Έ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”
    var nickName: String = "Sodeul"
    var age: Int?
    
    // 2. Designated Initializersλ₯Ό 직접 κ΅¬ν˜„ X
}

 

 

2.  μžμ‹ ν΄λž˜μŠ€κ°€ λͺ¨λ“  지정 μƒμ„±μžλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•œ 경우 (편의 μƒμ„±μž 상속)

class Human {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    convenience init(unknown: String) {
        self.init(name: unknown)
    }
}
 
class Sodeul: Human {
    var nickName: String
    
   override init(name: String) {
      nickName = name
       super.init(name: name)
    }
}

 

 

좜처
https://babbab2.tistory.com/170

https://babbab2.tistory.com/169?category=828998 

 

Swift) μ΄ˆκΈ°ν™”(Initializers) μ΄ν•΄ν•˜κΈ° (3/6) - Initializer Delegation

μ•ˆλ…•ν•˜μ„Έμš” :) μ†Œλ“€μž…λ‹ˆλ‹Ή 이번 ν¬μŠ€νŒ…μ€ μ΄ˆκΈ°ν™”(Initializers) μ΄ν•΄ν•˜κΈ° 3편~~!!!! Initializer Delegation에 λŒ€ν•΄ 이해해보렀고 ν•©λ‹ˆλ‹Ή μ΄ˆκΈ°ν™”κ°€ μ²˜μŒμ— κ³΅λΆ€ν•˜λ©΄ μ–΄λ €μš΄ 만큼 Delegation을 μ΄ν•΄ν•˜κΈ° μ–΄λ €μšΈ

babbab2.tistory.com

 

Swift) μ΄ˆκΈ°ν™”(Initializers) μ΄ν•΄ν•˜κΈ° (4/6) - 클래슀의 2단계 μ΄ˆκΈ°ν™” 및 상속

μ•ˆλ…•ν•˜μ„Έμš” :) μ†Œλ“€μž…λ‹ˆλ‹Ή μ˜€λŠ˜λΆ€ν„° μ €λŠ” 일찍 μΌμ–΄λ‚˜λŠ” μƒˆκ°€ 일찍 쑸리닀..λ₯Ό μ‹œμ „ν•  μ˜ˆμ • λ‚œ νŒŒμ›Œ P인데 λΆ„λͺ….. 인생 κ³„νšλ§ŒνΌμ€ 늘 J둜 μ„Έμš°λŠ”.. μ‚¬λžŒ μ΄λž„κΉŒ..? μ¨Œλ“  이번 ν¬μŠ€νŒ…μ€ μ§€κ²¨μš΄ Initia

babbab2.tistory.com

 

μ†Œλ“€μ΄λ‹˜ 덕뢄에 μ‰½κ²Œ μ΄ν•΄ν–ˆλ‹€..! κ°μ‚¬ν•©λ‹ˆλ‹€

profile

πŸ‘©πŸ»‍πŸ’» iOSun

@iosun

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!

profile on loading

Loading...