프로토콜의 프로퍼티

프로토콜의 프로퍼티

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

protocol SomeProtocol {
    var readOnly: String { get } // 읽기 전용
    var readAndWrite: String { get set } // 읽고 쓰기
}

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

읽기 전용

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

읽고 쓰기

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