[Swift] 프로토콜

김상우·2021년 10월 27일
0

프로토콜이란

  • 애플 공식문서에 정의된 프로토콜의 정의

    "A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality."


-> "protocol은 특정 작업 혹은 기능들을 구현하기 위한 메소드, 프로퍼티 그리고 기타 다른 요구사항들의 청사진이다."

-> 청사진(靑寫眞) 또는 블루프린트(영어: blueprint)는 아키텍처 또는 공학 설계를 문서화한 기술 도면을 인화로 복사하거나 복사한 도면을 말한다. 은유적으로 "청사진"이라는 용어는 어떠한 자세한 계획을 일컫는 데에 쓰인다.

  • 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜를 "준수한다" (conform) 라고 표현한다.

Swift 코드

protocol someProtocol {
    init(value: Int)
}

class someClass: someProtocol {
    required init(value: Int) {
        print(value)
    }

}

struct someStruct: someProtocol {
    init(value: Int) {
        print(value)
    }
}

let class1 = someClass(value: 100)
let struct1 = someStruct(value: 200)
  • 클래스에서 프로토콜의 요구사항 init을 충족시키려면 required 키워드를 붙여줘야 하지만,

  • 구조체의 프로토콜 요구사항을 충족시키려면 required 키워드를 붙이지 않아야 한다.

is와 as로 프로토콜 준수 체크

  • is 로 프로토콜 준수 체크
protocol someProtocol2 {
    init(value: Int)
}

struct someStruct2: someProtocol2 {
    init(value: Int) {}
}

let struct2 = someStruct2(value: 1)

var someAny: Any = class1
someAny is someProtocol     // true
someAny is someProtocol2    // false
  • as로 프로토콜 준수 체크
var someAny2: Any = struct2

if let result = someAny2 as? someProtocol {
    print("프로토콜을 준수합니다.")
}
else{
    print("프로토콜을 준수하지 않습니다.")
}


func check(target: Any?) {
    guard let result = target as? someProtocol else {
        print("프로토콜을 준수하지 않습니다.")
        return
    }
    print("프로토콜을 준수합니다.")
}

check(target: someAny2)
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글