Protocol compostition

작성일

Protocol compostition

protocol Resettable {
  func reset()
}

protocol Printable {
  func printValue()
}

class Size: Resettable, Printable {
  var width = 0.0
  var height = 0.0

  func reset() {
    width = 0.0
    height = 0.0
  }

  func printValue() {
    print(width, height)
  }
}

class Circle: Resettable {
  var radius = 0.0

  func reset() {
    radius = 0.0
  }
}

class Oval: Circle {

}

let r: Resettable = Size()
let p: Printable = Size()

r과 P 는 각각 Resettable 과 Printabl를 구현한다. 하지만 동시에 구현받을수없을까? 둘다 사용하려면? &를 사용하면 된다.

var rp: Resettable & Printable = Size()

하지만

rp = Circel() //오류가 발생한다.

그 이유는 Circle에서는 Printable이 없기 떄문이다.