private (set) var 라는 것에 대해서 정리를 하기 위해 글을 작성합니다. 개발하는 정대리라는 유튜브에서 배운 것이고 링크는 아래와 같아요.개발하는 정정대리
import UIKit
struct MyPet {
var title: String = "타이틀없음"
private (set) var name: String = "이름없음"
private var nickName: String = "별명없음"
mutating func setName(to newName: String){
self.name = newName
}
mutating func setNickName(to newNickName: String) {
self.nickName = newNickName
}
}
var myPet = MyPet()
두개를 비교하기 전에 일반 적으로 변수 앞에 아무런 것도 달지 않으면 publicd이라고 쓴 것 과 같다. 그래서 선언한 클래스나 구조체 밖에서 접근 가능하다. 아래 코드에서 title은 구조체 밖에서 myPet.title = "바뀐타이틀" 로 바꿀 수 있다.
private으로만 선언을 하면 선언한 구조체나 클래스 안에서만 접근이 가능하다. print(myPet.nickName) 하면 에러 발생한다. 당연히 myPet.nickNmae = "새별명" 이라고 해도 에러 발생 한다. 'nickName' is inaccessible due to 'private' protection level"
하지만 private (set) var로 선언된 것은 밖에서 읽는 것은 가능 하지만 직접 셋팅하는 것은 안된다.
print(myPet.name) //"이름없음" 출력
myPet.name = "새이름" //에러 발생 : Cannot assign to property: 'name' setter is inaccessible
아래와 같이 name을 바꿀 수 있다.
myPet.setName(to: "새이름")
print(myPet.name) // "새이름"