Swift

Struct 접근제어와 Memberwise Initializers

양밀루 2025. 5. 29. 14:55

struct는 원래 자동으로 Memberwise Initializers를 제공해준다

하지만..

 

struct에서 하나의 프로퍼티라도 private이라면 Memberwise Initializers 또한 private!

 

내부에선 원래대로 자동으로 제공이 되는 것을 확인할 수 있다

 

하지만! 외부에서 사용하려면 따로 init을 작성해주어야 한다

struct Person {
    var name: String
    var age: Int?
    private var hobby: String = "Swimming"
  
    init(name: String) {
        self.name = name
    }
}

let milou = Person(name: "Milou")

 

 

 

추가로 직접 init도 하고 싶고, Memberwise Initializers도 사용하고 싶다면 

extension으로 빼면 된다

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

extension Person {
    init(name: String, age: Int) {
        self.name = name
        self.age = age
        self.hobby = "Swimming"
    }
}