μΈμ€ν΄μ€ μμ± λ° μλ©Έ
μΈμ€ν°λ₯Ό μμ±νλ λ°©λ²κ³Ό ν΄λμ€μ μΈμ€ν΄μ€κ° μλ©Έν λ μ§νλλ νλ‘μΈμ€μ λν΄μ..
μΈμ€ν΄μ€ μμ±
μ΄κΈ°ν κ³Όμ = μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μ¬μ©ν μ€λΉλ₯Ό νκΈ° μνμ¬ μ μ₯ νλ‘νΌν°μ μ΄κΉκ°μ μ€μ νλ μΌ
- μ΄λμ λΌμ΄μ λ₯Ό μ μνλ©΄ μ΄κΈ°ν κ³Όμ μ§μ ꡬν κ°λ₯ ( μ΄λμ λΌμ΄μ μ μν μ κ·Έμ μΈμ€ν΄μ€μ 첫 μ¬μ©μ μν΄ μ΄κΈ°ννλ κ²λΏ )
- init ν€μλλ₯Ό μ¬μ©νμ¬ μ΄λμ λΌμ΄μ 맀μλμμ νν
ν΄λμ€, ꡬ쑰체, μ΄κ±°νμ κΈ°λ³Έμ μΈ ννμ μ΄λμ λΌμ΄μ
Class SomeCLass{
init(){
// μ΄κΈ°νν λ νμν μ½λ
}
}
struct SomeStruct{
init(){
// μ΄κΈ°νν λ νμν μ½λ
}
}
enum SomeEnum{
case someCase
init(){
// μ΄κ±°νμ μ΄κΈ°νν λ λ°λμ caseμ€ νλκ° λμ΄μΌ νλ€.
self = .someCase
// μ΄κΈ°νν λ νμν μ½λ
}
}
νλ‘νΌν° κΈ°λ³Έκ°
ꡬ쑰체μ ν΄λμ€μ μΈμ€ν΄μ€λ μ²μ μμ±ν λ μ΅μ λ μ μ₯ νλ‘νΌν°λ₯Ό μ μΈν λͺ¨λ μ μ₯ νλ‘νΌν°μ μ΄κΈ°κ°μ ν λΉν΄μΌ ν¨
νλ‘νΌν°λ₯Ό μ μμ, νλ‘νΌν° κΈ°λ³Έκ°μ ν λΉνλ©΄ μ΄λμ λΌμ΄μ μμ λ°λ‘ μ΄κΈ°κ°μ ν λΉνμ§ μμλ νλ‘νΌν° κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°ν
Area ꡬ쑰체μ μ΄λμ λΌμ΄μ
struct Area{
var squareMeter: Double
init() {
squareMeter = 0.0 // squareMeterμ μ΄κΉκ° ν λΉ
}
}
let room: Area = Area()
print(room.squareMeter) // 0.0
Area ꡬ쑰체λ squareMeter λΌλ Double νμ μ μ μ₯ νλ‘νΌν°λ₯Ό κ°μ§κ³ μλ€. init μ΄λμ λΌμ΄μ λ‘ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ©°
squareMeterμ μ΄κΈ°κ°μ 0.0μ΄ λλ€.
μμ μ€λͺ νλ―μ΄ μ΄λμ λΌμ΄μ λ‘ μ μ₯ νλ‘νΌν°μ μ΄κΈ°κ°μ μ€μ νλ λ°©λ²λ μμ§λ§, νλ‘νΌν°λ₯Ό μ μν λ νλ‘νΌν°μ κΈ°λ³Έκ°μ ν λΉνλ λ°©μμ μ¬μ©ν μλ μλ€.
νλ‘νΌν° κΈ°λ³Έκ° μ§μ
struct Area{
var squareMeter: Double = 0.0 // νλ‘νΌν° κΈ°λ³Έκ° ν λΉ
}
let room: Area = Area()
print(room.squareMeter) // 0.0
μ΄λμ λΌμ΄μ 맀κ°λ³μ
μ΄λμ λΌμ΄μ λ 맀κ°λ³μλ₯Ό κ°μ§ μ μλ€.
μ¦, μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ κ³Όμ μ νμν κ°μ μ λ¬λ°μ μ μλ€.
μ΄λμ λΌμ΄μ 맀κ°λ³μ
srtuct Area{
var squareMeter : Double
init(fromPy py: Double) { // 첫λ²μ§Έ μ΄λμ
λΌμ΄μ
squareMeter = py * 3.3058
}
init(fromSquareMeter squareMeter: Double) { // λλ²μ§Έ μ΄λμ
λΌμ΄μ
self.squareMeter = squareMeter
}
init(value: Double){ // μΈλ²μ§Έ μ΄λμ
λΌμ΄μ
squareMeter = value
}
init(_value : Double) { // λ€λ²μ§Έ μ΄λμ
λΌμ΄μ
squareMeter = value
}
}
let roomOne: Area = Area(fromPy: 15.0)
print(roomOne.squareMeter) // 49.587
let roomTwo: Area = Area(fromSquareMeter : 33.06)
print(roomTwo.squareMeter) // 33.06
let roomThree: Area = Area(value: 30.0)
let roomFour: Area = Area(55.0)
Area() // μ€λ₯ λ°μ
μ΅μ λ νλ‘νΌν° νμ
μ΄κΈ°ν κ³Όμ μμ κ°μ μ΄κΈ°ννμ§ μμλ λλ, μ¦ μΈμ€ν΄μ€κ° μ¬μ©λλ λμμ κ°μ κΌ κ°μ§ μμλ λλ
μ μ₯ νλ‘νΌν°κ° μλ€λ©΄ ν΄λΉ νλ‘νΌν°λ₯Ό μ΅μ λλ‘ μ μΈν μ μλ€.
μ΅μ λλ‘ μ μΈν μ μ₯ νλ‘νΌν°λ μ΄κΈ°ν κ³Όμ μμ κ°μ ν λΉν΄μ£Όμ§ μλλ€λ©΄ μλμΌλ‘ nil μ΄ ν λΉ λλ€.
Person ν΄λμ€
class Person{
var name: String
var age: Int?
init(name: String){
self.name = name
}
}
let yagom: Person = Person(name: "yagom")
print(yagom.name) // "yagom"
print(yagom.age) // nil
yagom.age = 99
print(yagom.age) // 99
yagom.name = "Eric"
print(yagom.name) // "Eric"
μμ νλ‘νΌν°
μμλ‘ μ μΈλ μ μ₯ νλ‘νΌν°λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ κ³Όμ μμλ§ κ°μ ν λΉν μ μμΌλ©°, μ²μ ν λΉλ μ΄νλ‘λ κ°μ λ³κ²½ν μ μλ€.
π μμ νλ‘νΌν°μ μ½μ
ν΄λμ€ μΈμ€ν΄μ€μ μμ νλ‘νΌν°λ νλ‘νΌν°κ° μ μλ ν΄λμ€μμλ§ μ΄κΈ°νν μ μλ€.
ν΄λΉ ν΄λμ€λ₯Ό μμλ°μ μμν΄λμ€μ μ΄λμ λΌμ΄μ μμλ λΆλͺ¨ν΄λμ€μ μμ νλ‘νΌν° κ°μ μ΄κΈ°νν μ μλ€.
μμ νλ‘νΌν°μ μ΄κΈ°ν
class Person {
let name: String
var age: Int?
init(name: String) {
self.name = name
}
}
let yagom: Person = Person(name : "yagom")
yagom.name = "Eric" // μ€λ₯ λ°μ
κΈ°λ³Έ μ΄λμ λΌμ΄μ μ λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ
κΈ°λ³Έ μ΄λμ λΌμ΄μ λ νλ‘νΌν° κΈ°λ³Έκ°μΌλ‘ νλ‘νΌν°λ₯Ό μ΄κΈ°νν΄μ μΈμ€ν΄μ€λ₯Ό μμ±νλ€. μ¦, κΈ°λ³Έ μ΄λμ λΌμ΄μ λ μ μ₯ νλ‘νΌν°μ κΈ°λ³Έκ°μ΄ λͺ¨λ μ§μ λμ΄ μκ³ , λμμ μ¬μ©μ μ μ μ΄λμ λΌμ΄μ κ° μ μλμ΄ μμ§ μμ μνμμ μ 곡λλ€.
ꡬ쑰체λ μ¬μ©μ μ μ μ΄λμ λΌμ΄μ λ₯Ό ꡬννμ§ μμΌλ©΄ νλ‘νΌν°μ μ΄λ¦μΌλ‘ 맀κ°λ³μλ₯Ό κ°λ μ΄λμ λΌμ΄μ μΈ λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ λ₯Ό κΈ°λ³ΈμΌλ‘ μ 곡νλ€.
μ΄κΈ°ν μμ
ꡬ쑰체μ μ΄κ±°νμ μ½λμ μ€λ³΅μ νΌνκΈ° μνμ¬ μ΄λμ λΌμ΄μ κ° λ€λ₯Έ μ΄λμ λΌμ΄μ μκ² μΌλΆ μ΄κΈ°νλ₯Ό μννλ μ΄κΈ°ν μμμ κ°λ¨νκ² κ΅¬νν μ μλ€. νμ§λ§, ν΄λμ€λ μμμ μ§μνλ ν°λΌ κ°λ¨ν μ΄κΈ°ν μμλ ν μ μλ€.
κ° νμ μμ μ΄λμ λΌμ΄μ κ° λ€λ₯Έ μ΄λμ λΌμ΄μ λ₯Ό νΈμΆνλ €λ©΄ self.init μ μ¬μ©νλ€.
μ€ν¨ κ°λ₯ν μ΄λμ λΌμ΄μ
μ€ν¨ κ°λ₯μ±μ λ΄ν¬ν μ΄λμ λΌμ΄μ λ‘μ¨, μ€ν¨νμλ nil μ λ°νν΄μ£Όλ―λ‘ λ°ν νμ μ΄ μ΅μ λλ‘ μ§μ λλ€.
λ°λΌμ μ€ν¨ κ°λ₯ν μ΄λμ λΌμ΄μ λ init λμ μ init? ν€μλλ₯Ό μ¬μ©νλ€.
μ΄λμ λΌμ΄μ μ 맀κ°λ³μ
μ€ν¨νμ§ μμ μ΄λμ λΌμ΄μ μ μ€ν¨ κ°λ₯ν μ΄λμ λΌμ΄μ λ₯Ό κ°μ μ΄λ¦κ³Ό κ°μ 맀κ°λ³μ νμ μ κ°λλ‘ μ μν μ μλ€.
μ€ν¨ κ°λ₯ν μ΄λμ λΌμ΄μ λ μ€μ λ‘ νΉμ κ°μ λ°ννμ§ μλλ€. μ΄κΈ°νλ₯Ό μ€ν¨νμ λλ return nilμ
λ°λλ‘ μ΄κΈ°νμ μ±κ³΅νμ λλ return μ μ μ΄ μ΄κΈ°νμ μ±κ³΅κ³Ό μ€ν¨λ₯Ό ννν λΏ, μ€μ κ°μ λ°ννμ§λ μλλ€.
ν¨μλ₯Ό μ¬μ©ν νλ‘νΌν° κΈ°λ³Έκ° μ€μ
μΈμ€ν΄μ€λ₯Ό μ΄κΈ°νν λ ν¨μλ ν΄λ‘μ κ° νΈμΆλλ©΄μ μ°μ° κ²°κ³Όκ°μ νλ‘νΌν° κΈ°λ³Έκ°μΌλ‘ μ 곡ν΄μ€λ€.
λλ¬Έμ ν΄λ‘μ λ ν¨μμ λ°ν νμ μ νλ‘νΌν°μ νμ κ³Ό μΌμΉν΄μΌ νλ€.
μ¦, ν΄λ‘μ λ΄λΆμμλ μΈμ€ν΄μ€μ λ€λ₯Έ νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ μ°μ°ν μλ μλ€λ κ²μ΄λ€. λ€λ₯Έ νλ‘νΌν°μ κΈ°λ³Έκ°μ΄ μλ€κ³ ν΄λ μλλ€. λν, ν΄λ‘μ λ΄λΆμμ self νλ‘νΌν°λ μ¬μ©ν μ μμΌλ©°, μΈμ€ν΄μ€ λ©μλλ₯Ό νΈμΆν μλ μλ€.
ν΄λ‘μ λ₯Ό ν΅ν νλ‘νΌν° κΈ°λ³Έκ° μ€μ
class SomeClass {
let someProperty: SomeType = {
// μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ¬μ©μ μ μ μ°μ°μ ν΅ν ν λ°νν΄μ€λ€.
// λ°νλλ κ°μ νμ
μ SomeTypeκ³Ό κ°μ νμ
μ΄μ΄μΌ νλ€.
return someValue()
}()
}
ν΄λ‘μ λ€μ μκ΄νΈκ° λΆμ μ΄μ λ ν΄λ‘μ λ₯Ό μ€ννκΈ° μν΄μμ΄λ€.
ν΄λ‘μ λ€μ μκ΄νΈκ° λΆμ΄ ν΄λ‘μ λ₯Ό μ€νν κ²°κ³Όκ°μ νλ‘νΌν°μ κΈ°λ³Έκ°μ΄ λλ€.
μΈμ€ν΄μ€ μλ©Έ
ν΄λμ€μ μΈμ€ν΄μ€λ λμ΄λμ λΌμ΄μ λ₯Ό ꡬνν μ μλ€. ( μ΄λμ λΌμ΄μ μ λ°λ μν )
μ¦, λ©λͺ¨λ¦¬μμ ν΄μ λκΈ° μ§μ ν΄λμ€ μΈμ€ν΄μ€μ κ΄λ ¨νμ¬ μνλ μ 리 μμ μ ꡬνν μ μλ€.
π‘ λμ΄λμ λΌμ΄μ
- λμ΄λμ λΌμ΄μ λ ν΄λμ€μ μΈμ€ν΄μ€κ° λ©λͺ¨λ¦¬μμ μλ©ΈλκΈ° λ°λ‘ μ§μ μ νΈμΆλλ€.
- deinit ν€μλλ₯Ό μ¬μ©νμ¬ κ΅¬ννλ©΄ μλμΌλ‘ νΈμΆλλ€.
- ν΄λμ€μ μΈμ€ν΄μ€μμλ§ κ΅¬νν μ μλ€
- ν΄λμ€μλ λμ΄λμ λΌμ΄μ λ₯Ό λ¨ νλλ§ κ΅¬νν μ μλ€.
- 맀κ°λ³μλ₯Ό κ°μ§ μμΌλ©°, μκ΄νΈλ μ μ΄μ£Όμ§ μλλ€. λ μλμΌλ‘ νΈμΆλκΈ° λλ¬Έμ λ³λμ μ½λλ‘ νΈμΆν μλ μλ€.
λμ΄λμ λΌμ΄μ μ ꡬν
class SomeClass{
deinit(){
print("Instance will be deallocated immediately")
}
}
var instance: SomeClass? = SomeClass()
instance = nil // Instance will be deallocated immediately"
'π iOS > κΈ°μ΄λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift κΈ°μ΄] ν΄λ‘μ (0) | 2023.01.19 |
---|---|
[Swift κΈ°μ΄] μ κ·Όμ μ΄ (0) | 2023.01.18 |
[Swift κΈ°μ΄] νλ‘νΌν°μ λ©μλ (0) | 2023.01.10 |
[Swift κΈ°μ΄] ꡬ쑰체μ ν΄λμ€ (0) | 2023.01.05 |
[Swift κΈ°μ΄] μ΅μ λ (0) | 2023.01.04 |