우리가 아는 private는 현재 있는 코드 블록 안에서만 접근이 가능하도록 해주는 키워드인데, private (set)은 뭘까? 미리 말하자면 값을 set 하는 것도 private 하겠다라는 것이다.
다음과 같은 MyProfile 구조체가 있다고 가정해보자.
struct MyProfile {
private (set) var name: String = "Minji Kim"
var phone: String = "010-1111-2222"
mutating func changeName(_ newValue: String) {
self.name = newValue
}
}
MyProfile 구조체 외부에서 phone 변수의 값을 변경하면 제대로 적용된다.
하지만 private (set) 키워드가 사용된 name 변수의 값을 변경하려면 에러가 발생한다. "Cannot assign to property: 'name' setter is inaccessible" 즉, 값을 변경할 수 없다는 것이다.
이렇게 내부에서만 값이 변경되도록 하고 싶으면 private (set) 키워드를 사용하면 된다. mutating 키워드로 내부에서 값을 변경할 수 있도록 한 changeName 메소드를 이용하면 값을 변경할 수 있는 것을 확인할 수 있다.