프로토콜의 프로퍼티

  • 프로토콜은 일종의 청사진이다.
  • 구현은 채택하는 쪽에 맡기고 어떻게 구현하라는 가이드만 줄 뿐이다.
  • 프로토콜은 프로퍼티 구현을 요구할때 읽기전용과 읽고 쓰기가 가능한 프로퍼티를 요구할 수 있다.
  • 읽기 전용은 get, 읽고 쓰기는 get과 set을 함께 쓴다.
protocol SomeProtocol {
    var readOnly: String { get } // 읽기 전용
    var readAndWrite: String { get set } // 읽고 쓰기
}

class SomeClass: SomeProtocol {
    let readOnly: String = "읽기 전용" // 가능
    let readAndWrite: String = "읽고 쓰기" // 에러
}

읽기 전용

  • 읽기 전용은 읽고 쓰기가 가능한 프로퍼티보다 좁은 의미인 것 같지만, 사실은 읽기 전용 프로퍼티가 읽고 쓰기가 가능한 프로퍼티보다 더 넓은 의미로 사용된다. (상수, 변수, 연산 프로퍼티 모두 가능)
  • 읽기 전용 프로퍼티는 읽을 수 만 있다면 읽기만 가능한지, 혹은 읽고 쓰기가 모두 가능한지 알 필요가 없기 때문에 더 큰 의미로 사용된다.
  • 즉, 읽기 전용 프로퍼티는 읽기 전용 혹은 읽고 쓰기 프로퍼티로 구현되든 상관이 없다.

읽고 쓰기

  • 읽고 쓰기가 모두 가능한 프로퍼티는 제한이 있을 수 밖에 없다.
  • 만약 읽고 쓰기로 구현해야할 프로퍼티를 상수로 정의한다면 읽을 수는 있지만 쓸 수는 없기 때문에 꼭 변수로만 구현해야 한다.
  • 연산 프로퍼티의 경우에도 get과 set을 모두 구현해야하기 때문에 get만 있는 연산 프로퍼티로는 구현할 수 없다.
  • 즉, 읽고 쓰기가 가능한 프로퍼티의 경우에는 저장 프로퍼티의 경우 무조건 변수로만 정의해야하며, 연산 프로퍼티의 경우에는 get과 set을 모두 구현해야만 한다.