7-3 Initializer

STONE·2024년 12월 4일

Swift_Ios

목록 보기
25/44

주제

Initializer

클래스, 구조체, 또는 열거형의 새로운 인스턴스를 생성할 때 사용되는 특별한 메서드다.
초기화 과정에서 해당 타입의 모든 속성을 설정하고, 초기 상태를 준비해주는 역할을 한다.
보통 init키워드를 사용해서 정의해

예시 코드

struct Person {
    var name: String
    var age: Int

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

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

종류

  1. 디폴트 Initializer: 모든 속성에 기본값이 있다면 자동으로 생성된다.
  2. 커스텀 Initializer: 특정 초기화 로직을 작성할 때 사용
  3. 편의 Initializer: 클래스에서 보조적인 초기화를 제공하며, convenience 키워드로 정리
  4. 필수 Initializer: 상속받은 클래스에서 반드시 구현해야 하는 Initializer로, required키워드를 사용

디폴트 Initializer

struct Car {
    var brand = "Hyundai"
    var model = "Sonata"
}

let car = Car()
print(car.brand) // "Hyundai"

Memberwise Initializer

struct Point {
    var x: Int
    var y: Int
}

let point = Point(x: 10, y: 20)
print(point.x) // 10

필수 Initializer

class Animal {
    var name: String

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

class Dog: Animal {
    required init(name: String) {
        super.init(name: name)
    }
}

편의 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: "Alice")
print(person.age) // 0

필요하지 않은 속성의 선택적 초기화

// 속성이 Optional 이라면 초기값 없이 선언할 수 있다.
struct User {
    var username: String
    var age: Int?
}

let user = User(username: "john_doe")
print(user.age) // nil

클래스의 상속과 초기화

//지정 이니셜라이저와 편의 이니셜라이저가 구분됩니다
// 서브클래스는 반드시 부모 클래스의 지정 이니셜라이저를 호출해야 된다.

class Parent {
	var name: String
    
    init(name: String){
    	self.name = name
    }
}

class Child: Parent {
	var age: Int
    
    init(name: String, age: Int){
    	self.age = age
        super.init(name: name) // 부모 이니셜라이저 호출
    }
}
profile
흠...?

0개의 댓글