[swift] Swift에서 편의 초기화 메서드를 사용하는 이유

Swift에서는 초기화 과정을 간편하게 만들어주는 편의 초기화 메서드(convenience initializer)를 제공합니다. 이 편의 초기화 메서드를 사용하는 이유는 다음과 같습니다.

1. 초기화 과정 단순화

클래스나 구조체를 초기화할 때, 여러 개의 초기화 과정이 필요한 경우가 있습니다. 예를 들어, 프로퍼티들을 초기화하는데 상속 관계에 따라 다른 초기값을 지정해야 할 경우가 있습니다. 이런 경우에 각각의 초기화 과정을 개별적으로 구현하는 것은 번거로울 수 있습니다.

편의 초기화 메서드를 사용하면, 이러한 초기화 과정을 하나의 편의 초기화 메서드로 묶어 간단하게 작성할 수 있습니다. 편의 초기화 메서드는 기본적으로 같은 클래스나 구조체 내의 다른 초기화 메서드를 호출하여 초기화를 진행하는 역할을 수행합니다.

예를 들어, 다음과 같은 코드에서 보여주는 것처럼, Car 클래스에서 특정 초기값을 사용하는 편의 초기화 메서드(convenience init)를 정의할 수 있습니다.

class Car {
    var brand: String
    var color: String
    var price: Int

    init(brand: String, color: String, price: Int) {
        self.brand = brand
        self.color = color
        self.price = price
    }

    convenience init(brand: String, color: String) {
        self.init(brand: brand, color: color, price: 0)
    }
}

위 코드에서 편의 초기화 메서드인 convenience init(brand: String, color: String)를 사용하면, 가격을 지정하지 않아도 자동으로 가격을 0으로 초기화하는 편의 초기화 메서드를 호출할 수 있습니다.

2. 다양한 초기화 방법 지원

Swift에서는 다양한 초기화 방법을 지원합니다. 이러한 초기화 방법은 다른 형식의 인수를 받아 초기화하는 메서드로, 편의 초기화 메서드를 사용하여 간단하게 구현할 수 있습니다.

예를 들어, 다음과 같이 Person 클래스에서 이름과 나이를 인수로 받아 초기화하는 편의 초기화 메서드를 추가할 수 있습니다.

class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    convenience init(name: String) {
        self.init(name: name, age: 0)
    }
}

위 코드에서 편의 초기화 메서드인 convenience init(name: String)를 사용하면, 나이를 지정하지 않아도 자동으로 나이를 0으로 초기화하는 편의 초기화 메서드를 호출할 수 있습니다.

3. 유연한 초기화 옵션 제공

편의 초기화 메서드를 사용하면, 클래스나 구조체의 초기화 과정에서 유연한 옵션을 제공할 수 있습니다. 예를 들어, 초기화할 때 특정 값의 유무에 따라 다른 초기화를 수행하고 싶은 경우, 편의 초기화 메서드를 활용할 수 있습니다.

class MyViewController: UIViewController {
    var title: String
    var message: String

    init(title: String, message: String) {
        self.title = title
        self.message = message
        super.init(nibName: nil, bundle: nil)
    }

    convenience init(title: String) {
        self.init(title: title, message: "")
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

위 코드에서는 MyViewController 클래스에서 titlemessage를 초기화하는 초기화 메서드를 정의하였습니다. convenience init(title: String)을 사용하여 message를 빈 문자열로 초기화하는 편의 초기화 메서드를 추가하였습니다. 이렇게 함으로써, MyViewController 클래스의 인스턴스를 생성할 때 message 값 없이 생성할 수 있습니다.

따라서, Swift에서 편의 초기화 메서드를 사용하는 이유는 초기화 과정을 단순화하고, 다양한 초기화 방법을 지원하며, 유연한 초기화 옵션을 제공하기 위함입니다.