intro) 요구사항

어떻게 프로토콜에서 각각의 멤버들을 구현해야 하는지에 대한 요구사항에 대해 배워보자. 아래 코드를 기준으로 한번 살펴보자구욧!

protocol Sopt {
    var partLeader: String { get set }
    var seminaPlace: String { get set }
    var mvp: String { get set }
    
    func semina()
    func assignment()
}

1. Property Requirements (속성 요구사항)

1-1. 프로토콜을 채택해서 선언된 프로퍼티를 구현할 경우, 저장 프로퍼티로 구현하든, 연산 프로퍼티로 구현하든 상관 없다.

⇒ 우리는 흔히 프로토콜을 채택해서 구현할 때 저장 프로퍼티로 정의해야 된다는 생각을 하는데 연산 프로퍼티를 사용해도 된다!

protocol Sopt {
    var partLeader: String { get }
}

struct IOS: Sopt {  // 저장 프로퍼티
    var partLeader: String = "김승찬"
}

struct Server: Sopt { // 연산 프로퍼티
    var partLeader: String {
        return "이승헌"
    }
}

1-2. 프로토콜에 선언되는 프로퍼티는 항상 var로 선언 되어야 한다.

let으로 선언하면 에러가 난다.

⇒ 그 이유는 아마도 프로토콜을 채택하면 저장 프로퍼티, 연산 프로퍼티 둘로 구현할 수 있는데, 연산 프로퍼티 자체가 var로 선언되면 안되기 때문에!! 그런거 같다!!

Untitled

그럼 프로토콜에서 선언된 프로퍼티들은 var, let 중 뭐로 선언해야 좋을까?

1-3. { get set } 속성에 따라 달라지는 let / var 속성

저장 프로퍼티 → {get set}인지 {get}인지에 따라서 달라진다.

연산 프로퍼티 → 무조건 var로 선언해야겠쬬?

천천히 알아봅시다!

i) {get}으로 선언된 경우

프로토콜에서 gettable만 필요로 하는 경우, 모든 종류의 프로퍼티에서 요구사항을 충족시킬 수 있으며 , 만약 필요하다면 settable이 될 수도 있습니다.

내가 새로 만든 인스턴스의 값을 읽어오긴만 한다면