Swift 생성자 심화

DG
4 min readJul 12, 2024

--

Swift에서 생성자는 객체를 초기화하는 역할을 합니다. 생성자는 객체의 속성 값을 설정하고 초기화하는 데 사용됩니다. 생성자에 대해 심화적으로 알아보겠습니다.

기본 생성자

Swift에서는 클래스, 구조체, 열거형이 기본적으로 생성자를 제공합니다. 구조체와 클래스는 자동으로 모든 속성에 기본값이 있는 경우 기본 생성자를 제공합니다.

struct Person {
var name: String
var age: Int
}

let person = Person(name: "John", age: 30)

사용자 정의 생성자

사용자 정의 생성자를 통해 객체 초기화를 사용자 지정할 수 있습니다.

struct Person {
var name: String
var age: Int

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

let person = Person(name: "John", age: 30)

편의 생성자 (Convenience Initializer)

편의 생성자는 클래스에서만 사용할 수 있으며, 보조 생성자로서 주 생성자(primary initializer)를 호출하여 초기화를 단순화할 수 있습니다.

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)
}
}

let person = Person(name: "John")

필수 생성자 (Required Initializer)

필수 생성자는 하위 클래스에서 반드시 구현해야 하는 생성자입니다. required 키워드를 사용하여 정의합니다.

class Person {
var name: String
var age: Int

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

class Employee: Person {
var jobTitle: String

required init(name: String, age: Int) {
self.jobTitle = "Unknown"
super.init(name: name, age: age)
}
}

let employee = Employee(name: "John", age: 30)

Failable Initializer (실패 가능한 생성자)

생성자가 실패할 가능성이 있는 경우, init? 또는 init!로 실패 가능한 생성자를 정의할 수 있습니다. 실패 시 nil을 반환합니다.

struct Person {
var name: String
var age: Int

init?(name: String, age: Int) {
if age < 0 {
return nil
}
self.name = name
self.age = age
}
}

if let person = Person(name: "John", age: -1) {
print("Person created: \(person.name)")
} else {
print("Failed to create Person")
}

디이니셜라이저 (Deinitializer)

디이니셜라이저는 클래스 인스턴스가 소멸되기 전에 호출되는 메서드입니다. deinit 키워드를 사용하여 정의합니다.

class Person {
var name: String

init(name: String) {
self.name = name
}

deinit {
print("\(name) is being deinitialized")
}
}

var person: Person? = Person(name: "John")
person = nil // "John is being deinitialized" 출력

--

--

DG
DG

Written by DG

한국의 iOS 개발자이다. 강아지와 운동을 좋아함. github: https://github.com/donggyushin