-
[Swift] self λ μ΄λ μμ λΆν° μ¬μ©ν μ μμκΉ?iOS/π Swift 2021. 1. 1. 23:45
1μ°¨ μμ : 2021/06/10
μλ νμΈμ. μ€λμ self μ μ κ·Ό κ°λ₯ μμ μ λν΄μ μ μ΄λ³΄λ €κ³ ν©λλ€πΆ
μ¬μ€ μ΄ κΆκΈμ¦μ μ κ° μ€μννΈλ₯Ό μ²μ μμν λ¬΄λ ΅ κ°μ§κ²λ κ²μΈλ°,
κ²°λ‘ λΆν° λ§μλ리μλ©΄ μ΄ κΆκΈμ¦μ ν΄λμ€μ Initialization Process λ₯Ό μ΄ν΄νλ©΄ μλ²½νκ² ν΄κ²°λ©λλ€π
μ μ κ²½νμΌλ‘λ μ΄ μ£Όμ (Initialization Process)λ₯Ό μμ£Ό κΌΌκΌΌνκ² μ¬λ¬λ² μ½μ ν λΉλ‘μ μ΄ν΄κ° λμλ κ² κ°μ΅λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ μ΄ κΈμ μ μ μ΄μ λ λ§ν λΆλΆμ ν΄κ²°νκΈ° μν΄ Initialization μ 체λ₯Ό λ€μ 곡λΆν΄μΌν μκ°μ΄ μμ΄μ, ad-hoc μΌλ‘ μ°μ μκ³ λμ΄κ°λ €κ³ νμλ λΆλ€μ μν΄μμ λλ€.
:: ad-hoc μ΄ λ¬΄μ‘°κ±΄ λμ κ²μ΄λΌκ³ μκ°νμ§λ μμ΅λλ€
μ΄ κΈμμλ Initialization Process μ μ 체 λ΄μ©μ λ€λ£¨μ§λ μμ§λ§, sefl μ μ κ·Ό κ°λ₯ μμ μ μ΄ν΄νκΈ° μνμ¬ μ‘°κΈμ© λ΄μ©μ μκ°ν κ±°μμ~
κ·ΈλΌ μμν΄λ³Όκ²μ!!ππ»ππ»ππ»
ν μ₯μ κ·Έλ¦ΌμΌλ‘ νννλ©΄ λ€μκ³Ό κ°μ΅λλ€.
1. μΈμ€ν΄μ€ μμ± μ΄κΈ°ν μμ μμλ μ κ·Όν μ μλ€
class Person { var name: String = "Park" var birthDate: String = "1994/09/15" var description: String = "My birthday is ... " + self.birthDate // μ»΄νμΌμλ¬ }
μμ±μ default value μ½λμ μ»΄νμΌλ¬ νκ° μμ μ
init() μ λ°λμμ μΈμ€ν΄μ€ μμ±μ κ°μ μ΄κΈ°ννλ μμ κ³Ό λμΌν©λλ€.
:: μ μ½λμμλ "Park", "1994/09/15" λ±μ λΆλΆμ΄ νκ°λλ μμ μ κ°λ¦¬ν΅λλ€.
μΈμ€ν΄μ€ μμ±μ κ°μ μ°λ μμ μ self λΌλ κ° μμ²΄κ° μμ§ μ΄κΈ°ν μλ£λκΈ° μ μ λλ€.
μ΄ λλ self λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ κ° μ΄ λΆλΆμμ ν·κ°λ Έμλλ°,
self μ μ¬μ©ν μ μλ€λ ννμ μλ―Έλ₯Ό μ λλ‘ μλ κ²μ΄μμ΅λλ€.
κ·Έλ¦¬κ³ μλμ κ°μ μ½λλ self λ₯Ό μ¬μ©νλ κ²μ΄ μλκ°? λΌλ κ²μ΄ μ μλ¬Έμ ν΅μ¬μ΄μμ΅λλ€.
init() { self.name = "Hasiguchi" self.date = "1998/06/24" super.init() }
self κ° μ½λμ λͺ λ°±ν μ ν μκΈ° λλ¬Έμ μ λ μ²μμ μ΄κ²μ΄ self λ₯Ό μ¬μ©νλ μ½λλΌκ³ λ§μ°ν μκ°νλ κ² κ°μ΅λλ€.
νμ§λ§ μ€λ₯λ λ¨μ§ μμ΅λλ€. μμΌκΉμ?
κ²°λ‘ μ μ΄λ μ΅λλ€.
μμ μ½λλ self μ μ κ·Όνμ¬ κ°μ μ°κ³ μμ λΏμ΄κΈ° λλ¬Έμ, self λ₯Ό μ¬μ©νλ€κ³ λ³Ό μλ μμ΅λλ€.
init() μ΄ νΈμΆ λ μ§νμ, μΈμ€ν΄μ€λ λ΄μ©μ μ΄κΈ°νλμ§ μμ μνμ΄μ§λ§ λΆλͺ ν (λ©λͺ¨λ¦¬μ ν λΉλ) μ£Όμλ₯Ό κ°μ§κ² λ©λλ€.
μ΄λ μμ§ μΈμ€ν΄μ€κ° μμ ν μ΄κΈ°ν λμ§ μμκΈ° λλ¬Έμ self λ₯Ό μ¬μ©ν μλ μμ§λ§,
λΆλͺ ν λ©λͺ¨λ¦¬ μ£Όμλ κ°μ§κ³ μκΈ° λλ¬Έμ μ κ·Όνμ¬ κ°μ μ΄κΈ°νν μ μλ κ²μ λλ€.
π‘lazy ν€μλλ‘ μμ± μ΄κΈ°ν μμ μ λ¦μΆλ©΄, self λ₯Ό μ¬μ©ν μ μμ΅λλ€.
lazy λ‘ μ μλ μμ±μ νΈμΆ μμ μ μ΄κΈ°νλ₯Ό μμνκΈ° λλ¬Έμ, κ·Έ μμ μ΄ λ¬΄μ‘°κ±΄ μΈμ€ν΄μ€ μ΄κΈ°ν μ΄νμμ΄ λ³΄μ₯λ©λλ€.
μΈμ€ν΄μ€ μ΄κΈ°νκ° μλ£λμλ€λ©΄ self λ₯Ό μ¬μ©ν μ μμΌλ―λ‘ lazy μμ±μμλ seflλ₯Ό μ¬μ©ν μ μμ΅λλ€.
2. init() μ super.init() νΈμΆ μ΄νμ μ κ·Όν μ μλ€
Initailzation Process (Chain) μ μνμ¬,
init() μ λ°λμμ super.init() μ νΈμΆνλ©΄ 체μΈμ νκ³ μνΌ ν΄λμ€μ μμ± λ° μΈμ€ν΄μ€κ° μ°¨λ‘λ‘ μ΄κΈ°ν λ©λλ€.
super.init() μ΄ λ°νλ μμ μ, self κ° μλ²½νκ² μ΄κΈ°νλ μνμ λλ€.
μ΄ν μ½λλΆν° self λ₯Ό μ¬μ©ν μ μμ΅λλ€.
init() { self.name = "Hasiguchi" self.date = "1998/06/24" super.init() self.someProperty = "Override Value" self.someInstanceMethod() }
π‘μμκ³μΈ΅μ΄ μλ ν΄λμ€λΌλ©΄, λͺ¨λ μμ±μ΄ μ΄κΈ°νλ μ΄ν μμ μ΄λΌλ©΄ νΈμΆ κ°λ₯ν©λλ€
class A { var test: Int init() { self.test = 3 self.testFunc() // μμ±μ΄ μ λΆ μ΄κΈ°ν λκΈ° μ μ self λ₯Ό λ¨Όμ μ¬μ©νλ κ²μ μ»΄νμΌ μλ¬ // self.testFunc() // self.test = 3 } func testFunc() { print("test") } }
μΈμ€ν΄μ€ λ©μλμμ μ κ·Όν μ μλ€
μΈμ€ν΄μ€ λ©μλλ self κ° μ΄κΈ°ν λ μ΄ν μμ λΆν° νΈμΆν μ μμ΅λλ€.
κ·Έλμ λ©μλ νΈμΆ μμ μμλ self μ μ΄κΈ°νκ° μλ£λμ΄μμμ΄ λ³΄μ₯λ©λλ€.
λ°λΌμ self λ₯Ό λ©μλ λ°λμμ μ¬μ©ν μ μμ΅λλ€.
λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Strong Reference Cycle - Memory (0) 2021.01.03 Weak Reference - Memory (0) 2021.01.02 Strong Reference - Memory (0) 2020.12.31 ARC - Memory (0) 2020.12.30 [Swift] κ°νμ κ³Ό μ°Έμ‘°νμ ( Value Type vs Reference Type ) (4) 2020.12.29