본문 바로가기

개발

Swift 초기화 (Initialization)

728x90

Swift 초기화 (Initialization in Swift)

Swift 초기화는 인스턴스의 속성에 초기값을 설정하고 사용 가능한 상태로 만드는 중요한 과정입니다. 객체 지향 프로그래밍에서 초기화는 객체가 올바르게 작동하기 위해 필수적인 역할을 합니다.

Swift에서는 다양한 초기화 방식을 제공하며, 상황에 맞게 적절한 방식을 선택하여 사용하는 것이 중요합니다.

1. 기본 초기화 (Default Initializer)

  • 모든 클래스, 구조체, 열거형에는 기본적으로 기본 초기화가 제공됩니다.
  • 기본 초기화는 모든 저장 프로퍼티에 기본값을 설정합니다.
  • 저장 프로퍼티에 기본값이 없거나 옵셔널 타입인 경우, 기본 초기화는 해당 프로퍼티를 초기화하지 않습니다.
struct Person {

    var name: String

    var age: Int

}



let jimin = Person()   // 기본 초기화 사용

print(jimin.name)   // "" (기본값으로 설정됨)

print(jimin.age)    // 0 (기본값으로 설정됨)

 

2. 지정 초기화 (Designated Initializer)

  • init 키워드를 사용하여 명시적으로 정의하는 초기화 방식입니다.
  • 인스턴스의 모든 저장 프로퍼티를 초기화해야 합니다.
  • convenience initializer와 달리, 상속받은 클래스에서 재정의해야 합니다.
struct Person {

    var name: String

    var age: Int



    init(name: String) {

        self.name = name

        self.age = 0   // 예시: age는 초기값으로 0으로 설정

    }



    init(name: String, age: Int) {

        self.name = name

        self.age = age

    }

}



let jhope = Person(name: "제이홉")   // name만 전달

print(jhope.name)   // "제이홉"

print(jhope.age)    // 0



let suga = Person(name: "슈가", age: 30)   // name과 age 전달

print(suga.name)   // "슈가"

print(suga.age)    // 30

 

3. 편의 초기화 (Convenience Initializer)

  • convenience 키워드를 사용하여 정의하는 초기화 방식입니다.
  • 다른 초기화 메서드를 호출하여 인스턴스를 생성합니다.
  • 상속받은 클래스에서 재정의할 필요는 없습니다.
struct Person {

    var name: String

    var age: Int



    init(name: String) {

        self.name = name

        self.age = 0

    }



    convenience init(fullName: String) {

        let nameComponents = fullName.components(separatedBy: " ")

        guard let name = nameComponents.first else { return }

        self.init(name: name)   // 다른 초기화 메서드 호출

    }

}



let v = Person(fullName: "뷔 김태형")

print(v.name)   // "뷔"

print(v.age)    // 0

 

4. 선택적 초기화 (Optional Initializer)

  • nil을 허용하는 초기화 방식입니다.
  • return nil을 사용하여 초기화 실패를 나타낼 수 있습니다.
struct Person {

    var name: String?



    init?(name: String) {

        guard name.count >= 3 else { return nil }

        self.name = name

    }

}



let person1 = Person(name: "지민")   // 성공

print(person1?.name)   // Optional("지민")



let person2 = Person(name: "JK")   // 실패

print(person2?.name)   // nil

 

5. 참고 자료