μ΅μ€ν μ
μ€μννΈμ κ°λ ₯ν κΈ°λ₯μΌλ‘, ꡬ쑰체, ν΄λμ€, μ΄κ±°ν, νλ‘ν μ½ νμ μ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μ μκ² ν΄μ€λ€. κΈ°λ₯μ μΆκ°νλ €λ νμ μ ꡬνλ μμ€ μ½λλ₯Ό μμ§ λͺ»νλλΌλ νμ λ§ μκ³ μλ€λ©΄ κΈ°λ₯μ νμ₯ν μ μλ€.
μ΅μ€ν μ μΌλ‘ νμ μ μΆκ°ν μ μλ κ²λ€μλ
- μ°μ° νμ νλ‘νΌν° / μ°μ° μΈμ€ν΄μ€ νλ‘νΌν°
- νμ λ©μλ / μΈμ€ν΄μ€ λ©μλ
- μ΄κΈ°ν
- μλΈμ€ν¬λ¦½νΈ
- μ€μ²© νμ
- νΉμ νλ‘ν μ½μ μ€μν μ μλλ‘ κΈ°λ₯ μΆκ°
μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μλ μμ§λ§ κΈ°μ‘΄μ μ‘΄μ¬νλ κΈ°λ₯μ μ¬μ μ(override)λ λΆκ°λ₯νλ€. μ΄κ²μ΄ λ°λ‘ μμκ³Όμ μ°¨μ΄μ΄λ€.
μμ VS μ΅μ€ν μ
μμ - ν΄λμ€ νμ μ νμ© - μμ§μ μΌλ‘ νμ₯ - μ¬μ μ κ°λ₯
μ΅μ€ν μ - ν΄λμ€, ꡬ쑰체, μ΄κ±°ν, νλ‘ν μ½ λ± λͺ¨λ νμ μ νμ© - μνμ μΌλ‘ νμ₯ - μ¬μ μ λΆκ°λ₯
μμ λ§νλ κ²μ²λΌ ꡬνλ μμ€ μ½λλ₯Ό μμ§ λͺ»νλλΌλ νμ λ§ μκ³ μλ€λ©΄ κΈ°λ₯μ νμ₯ν μ μμ΄ μ΅μ€ν μ μ λ§€μ° μ μ©ν κΈ°λ₯μ΄λ€.
ꡬ쑰λ μλμ κ°κ³ μ¬μ©λ²μ κ°λ¨νκ² μμ±ν΄λ³΄μλ€.
extension νμ
μ΄λ¦ {
// νμ
μ μΆκ°λ μλ‘μ΄ κΈ°λ₯
}
extension νμ
μ΄λ¦: μ€μν νλ‘ν μ½ {
// νλ‘ν μ½ μꡬ μ¬ν ꡬν
}
1. μ°μ° νλ‘νΌν°
extension Double { // Double νμ
μ λ κ°μ μ°μ° νλ‘νΌν°λ₯Ό μΆκ°
var squared: Double {
return self * self
}
var cubed: Double {
return self * self * self
}
}
let myValue: Double = 3.0
print(myValue.squared)
// 리ν°λ΄μ κ·Έλλ‘ νΈμΆνλ κ²λ κ°λ₯
print(3.0.squared)
2. λ©μλ
extension Double {
func multiply(n: Double) -> Double {
return self * n
}
}
let myValue: Double = 3.0
print(myValue.multiply(5.0))
3. μ΄κΈ°ν
extension String {
init(int: Int) {
self = "\\(int)"
}
init(double: Double) {
self = "\\(double)"
}
}
let stringFromInt: String = String(int: 100)
μ§μ μ΄κΈ°ν (Designed Initializer)
- ν΄λμ€μ κΈ°λ³Έ μ΄λμ λΌμ΄μ
- λͺ¨λ νλ‘νΌν°λ₯Ό μ΄κΈ°ννκ³ μ μ ν μνΌ ν΄λμ€μ μ΄λμ λΌμ΄μ λ₯Ό νΈμΆ
- ν΄λμ€λ λ°λμ νλ μ΄μμ μ§μ μ΄κΈ°νλ₯Ό κ°μ§κ³ μμ΄μΌ ν¨
class Person {
var name: String
var age: Int
init() {
self.name = ""
self.age = 0
}
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
νΈμ μ΄κΈ°ν (Convenience Initializer)
- λ€λ₯Έ μ΄λμ λΌμ΄μ λ₯Ό μ§μνλ 보쑰 μ΄λμ λΌμ΄μ
- μ§μ μ΄κΈ°νμ μΌλΆ λ§€κ° λ³μλ₯Ό κΈ°λ³Έ κ°μΌλ‘ μ€μ νμ¬ νΈμΆ
- μ§μ μ΄κΈ°νμ λ€λ₯΄κ² λ°λμ κ°μ§ νμλ μμ
class Person {
// ... μλ΅
convenience init(name: String) {
self.init(name: name, age: 25)
}
}
λν μ€μννΈμμλ μ§μ μ΄κΈ°νμ νΈμ μ΄κΈ°νμ κ΄κ³λ₯Ό λͺ ννκ² νκΈ° μν΄ ν΄λμ€ μ νμ λν μ΄κΈ°ν μμ κ·μΉμ μ μνλ€.
- κ·μΉ 1 - μ§μ μ΄κΈ°νλ λΆλͺ¨ ν΄λμ€μμμ μ§μ μ΄κΈ°νλ₯Ό νΈμΆν΄μΌ νλ€.
- κ·μΉ 2 - νΈμ μ΄κΈ°νλ λμΌν ν΄λμ€μ λ€λ₯Έ μ΄κΈ°νλ₯Ό νΈμΆν΄μΌ νλ€.
- κ·μΉ 3 - νΈμ μ΄κΈ°νλ κΆκ·Ήμ μΌλ‘ μ§μ μ΄κΈ°νλ₯Ό νΈμΆν΄μΌ νλ€.
ν μ€λ‘ μ 리ν΄λ³΄λ©΄ μ§μ μ΄κΈ°νλ νμ λΆλͺ¨ ν΄λμ€μ μμν΄μΌ νκ³ , νΈμ μ΄κΈ°νλ νμ μ§μ μ΄κΈ°νμ μμν΄μΌ νλ€λ μλ―Έμ΄λ€.
μμ λμλλ₯Ό 보면 μμ ν΄λμ€μ μ§μ μ΄κΈ°νλ λΆλͺ¨ ν΄λμ€μ μ§μ μ΄κΈ°νμ μμνκ³ μκ³ , νΈμ μ΄κΈ°νλ λμΌν ν΄λμ€μ μ§μ μ΄κΈ°νμ μμνκ³ μλ κ²μ λ³Ό μ μλ€.
λν ν΄λμ€λ₯Ό μ μν λ μ΅μ λμ΄ μλ νλ‘νΌν°κ° κΈ°λ³Έ κ°μ΄ μλ κ²½μ° μλμΌλ‘ κΈ°λ³Έ μ΄κΈ°ν(μμ±μ)λ₯Ό μ 곡νλ€.
class Person {
var name: String?
var age: Int = 25
}
let p1 = Person() // μ»΄νμΌ OK!
let p2 = Person(name: "kodo", age: 25) // μ»΄νμΌ Error! -> ν΄λΉ 맀κ°λ³μλ₯Ό κ°λ μ΄κΈ°ν(μμ±μ)κ° μκΈ° λλ¬Έ
νμ§λ§ μ΅μ λμ΄ μλλ©΄μ κΈ°λ³Έ κ°μ΄ μλ κ²½μ° μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
class Person {
var name: String
var age: Int = 25
}
let p1 = Person() // μ»΄νμΌ Error!
κ·Έλ μ§λ§ ꡬ쑰체λ λ€λ₯΄λ€. κΈ°λ³Έ κ°μ΄ μλ κ²½μ°μλ 맀κ°λ³μλ‘ νλ‘νΌν°μ λν κ°μ λ겨주면 μΈμ€ν΄μ€κ° μ μμ μΌλ‘ μμ±λλ€.
struct Person {
var name: String
var age: Int
}
let p1 = Person() // μ»΄νμΌ OK!
π μ°Έκ³ ν κ²
'π» κ°λ° > iOS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS / Swift] lim ν΄λ‘μ -> 0 (ν΄λ‘μ , κ·ΉνμΌλ‘ μ€μ¬λ³΄κΈ°) (0) | 2022.10.05 |
---|---|
[iOS / Swift] ν΄λ‘μ μ νλ‘νΌν°, κ°λ³κ² μμ보기 (0) | 2022.10.02 |
[TIL] 22.08.25 (0) | 2022.08.25 |
[TIL] 22.08.24 (0) | 2022.08.24 |
[TIL] 22.06.03 (0) | 2022.06.03 |