본문 바로가기
iOS

[Swift] init과 Conveience init 그리고 ?

by DuncanKim 2023. 10. 14.
728x90

init과 Conveience init 그리고 ?

 

1. init과 Conveience init

convenience init과 init은 초기화 메서드(initializer)를 선언하는 데 사용되는 두 가지 다른 방법이다. 이 두 가지 방법은 다음과 같은 차이점이 있다.

 

1) Designated Initializer (init):

  • 주요 초기화 메서드로, 클래스나 구조체의 주요 속성을 설정하는 역할을 한다.
  • 주로 초기화 과정 중 다른 초기화 메서드를 호출하거나, 필수 속성을 설정하는 역할을 한다.
  • 하나의 클래스나 구조체에는 여러 개의 init 메서드를 가질 수 있으며, 각각의 init 메서드는 다른 매개변수와 초기화 과정을 수행한다(오버라이딩).

 

2) Convenience Initializer (convenience init):

  • 부가적인 초기화 메서드로, 편의를 위해 사용된다.
  • 보통 더 적은 매개변수를 가지며, 기존의 주요 초기화 메서드를 호출하여 초기화를 완료한다.
  • 주요 초기화 메서드가 모든 속성을 설정하도록 되어 있을 때, convenience init은 몇 가지 기본값을 가지고 초기화를 수행하거나, 특정한 초기화 과정을 간소화하는 데 사용된다.

 

예를 들어, 다음과 같은 클래스가 있다고 가정해보자

class Person {
    var name: String
    var age: Int

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

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

 

위의 코드에서 init(name:age:)은 주요 초기화 메서드로, name과 age 속성을 설정한다. 그리고 convenience init()은 부가적인 초기화 메서드로, 아무 매개변수 없이 호출되면 "Unknown" 이름과 나이 0으로 초기화를 완료한다.

 

요약하면, init은 주요 초기화 메서드로 클래스나 구조체의 주요 속성을 설정하는 역할을 하며, convenience init은 부가적인 초기화 메서드로 초기화를 편리하게 수행하는 데 사용된다.

 

2. ? 옵셔널이 붙은 init

 

convenience init?()는 이니셜라이저(initializer)를 정의하는 문법이다. 이 경우 "?"는 옵셔널 타입을 나타내며, convenience init?()은 옵셔널 이니셜라이저를 나타낸다.

 

옵셔널 이니셜라이저는 객체를 초기화할 때 실패할 수 있는 경우에 사용된다. 객체 초기화 과정에서 예외적인 상황이 발생하면 nil을 반환하여 초기화를 실패하도록 만들 수 있다.

 

예를 들어, 특정 조건을 만족하지 않으면 객체를 초기화하지 않고 nil을 반환하려는 경우에 convenience init?()을 사용할 수 있다. 이렇게 하면 객체 초기화가 실패할 경우 nil을 반환하고, 성공할 경우 객체를 반환하는 옵셔널 이니셜라이저를 정의할 수 있다.

728x90

댓글