점진적 과부하 개발 블로그

Swift initializer 본문

Swift/문법

Swift initializer

지용빡 2022. 1. 7. 00:22
반응형
인스턴스 초기화하기 : init()
  • 클래스, 구조체, 열거형(enum) 인스턴스가 생성되는 시점에서 해야 할 초기화 작업
  • 인스턴스가 만들어지면서 자동 호출된다.
init(매개변수: 타입, ...) {
	// 프로퍼티 초기화
    // 인스턴스 생성시 필요한 설정을 해주는 코드 작성
    }
designated initializer
  • 모든 프로퍼티를 다 초기화 시키는 생성자
class Animal {
    var dog: String = "강아지"
    var cat: String = "고양이"
    func display() {
        print("당신의 강아지=\(dog), 당신의 고양이=\(cat)")
    }
    init(myDog: String, myCat: String) {
        dog = myDog
        cat = myCat
    } // designated initializer
}
// init을 하나라도 직접 만들면 default initializer는 사라짐
var animal = Animal(myDog: "비비", myCat: "나비")
animal.display() // 인스턴스 메서드는 인스턴스가 호출
소멸자
  • 인스턴스가 사라질 때 자동 호출
  • deinit{}
self
  • 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.을 붙인다.
  • 아래 소스에서는 self를 붙이거나 생략해도 된다.
  • 옆의 소스에서는 매개변수와 구분하기 위해 반드시 써야한다.
class Animal {
    var dog: String = "강아지"
    var cat: String = "고양이"
    func display() {
        print("당신의 강아지=\(dog), 당신의 고양이=\(cat)")
    }
    init(dog: String, cat: String) {
        self.dog = dog
        self.cat = cat
    }
}
// init을 하나라도 직접 만들면 default initializer는 사라짐
var animal = Animal(dog: "비비", cat: "나비")
animal.display() // 인스턴스 메서드는 인스턴스가 호출
Failable Initializer
  • 실패 가능한 이니셜라이저, 실패하면 nil을 반환해준다. 그렇게 때문에? 옵셔널 타입으로 지정해 준다.
import Foundation

class Human {
    var age: Int = 20 // stored property
    var weight: Double = 70 // stored property
    func display() {
        print("나이=\(age), 몸무게=\(weight)")
    }
    init?(age: Int, weight: Double) {
        if age <= 0 {
            return nil
        }
        else {
            self.age = age
        }
        self.weight = weight
    } // failable initialize
}
failable initializer가 있는 클래스의 인스턴스 생성
var park = Human(age: 24, weight: 70)
park?.display() // 옵셔널 형으로 선언

if let park1 = park { // 1-2 옵셔널 바인딩
    park1.display()
}

// 인스턴스 생성과 동시에 옵셔널 바인딩
if let park2 = Human(age: 20, weight: 80) {
    park2.display()
}

// 인스턴스 생성하면서 바로 강제 언래핑
var park3 = Human(age: 30, weight: 90)!
park3.display()

// 옵셔널 인스턴스르 사용시 강제 언래핑
var park4 = Human(age: 40, weight: 100)
park4!.display()

 

반응형

'Swift > 문법' 카테고리의 다른 글

Swift 프로토콜(Protocol)  (0) 2022.01.08
Swift 문법 정리 2  (0) 2022.01.07
Swift 클래스(class)  (0) 2022.01.06
Swift 클로저(Closure)  (0) 2022.01.06
Swift guard문  (0) 2022.01.05