Swift(17) 생성자

개발렬·2023년 7월 24일
0

Swift

목록 보기
17/23

생성자가 필요한 이유

  • 객체 초기화
  • 안정성과 유효성 검사
  • 기본값 제공
  • 초기화 과정 커스터마이징
  • 클래스 상속

객체가 생성되면서 해당 객체의 속성들을 초기값으로 설정하고, 다양한 초기화 작업을 수행할 수 있습니다.

유효한 상태로 초기화합니다. 그러므로 잘못된 값이 들어오지 않도록 제한할 수 있습니다.

이를 통해 객체를 초기화할 때, 일부 속성들에 대해 따로 값을 지정하지 않더라도 기본값으로 초기화할 수 있습니다. 또한 초기화 과정을 커스터마이즈할 수 있습니다.

클래스 상속에서도 중요한 역할을 합니다. 서브클래스가 슈퍼클래스의 생성자를 상속받아 사용할 수 있고, 필요에 따라 추가적인 초기화 작업을 할 수 있습니다.

class Person {
    var name: String
    var age: Int

    // 생성자를 사용하여 객체 초기화
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let person = Person(name: "Alice", age: 30)
print(person.name) // "Alice"
print(person.age) // 30

위의 예시에서 Person 클래스의 생성자를 사용하여 person 객체를 초기화했습니다.

생성자를 통해 객체의 속성들을 초기값으로 설정하고, 객체가 유효한 상태로 생성되었습니다.

Swift에서 클래스를 초기화하는 두 가지 초기화 방법

  1. Designated Initializer (지정 이니셜라이저):
  • 클래스 내에서 반드시 하나 이상의 Designated Initializer가 있어야 합니다.
  • Designated Initializer는 자신의 속한 클래스의 상위 클래스의 Designated Initializer를 호출하여 체인을 형성합니다. 이를 "이니셜라이저 체인"이라고 합니다.
  • 반드시 클래스 내의 모든 속성을 초기화해야 합니다. 초기화되지 않은 속성은 컴파일 오류를 발생시킵니다.
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
  1. Convenience Initializer (편의 이니셜라이저):
  • Convenience Initializer는 같은 클래스 내에서 Designated Initializer를 호출하여 기능을 보완하는 보조 초기화 메서드입니다.
  • Convenience Initializer는 반드시 같은 클래스 내의 다른 이니셜라이저를 호출하여 초기화 과정을 완료해야 합니다.
  • 보통 인자의 개수나 기본값(default value)을 다르게 제공하여 호출하기 편하도록 합니다.
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)
    }
}
profile
Flutter, iOS...나는 모바일 앱 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

좋은 정보 감사합니다

답글 달기