// 프로토콜에서 메소드를 선언하고 형식에서 메소드 요구사항을 구현
// {}와 method body는 선언하지 않음
// 프로토콜을 값 형식이 채용할 수 있고 메소드 내부에서 속성값을 변경해야 한다면 mutating 키워드를 추가해야 한다.
// 이 경우 값 형식 전용이라고 생각할수도있지만 프로토콜에서의 mutating은 메소드에서 속성을 변경할 수 있어야 한다는 요구사항을 표현할 뿐 -> 참조형식에서도 문제없이 채용 할 수 있음
protocol ResetTable {
mutating func reset()
static func reset2()
}
class Size: ResetTable {
var width = 0.0
var height = 0.0
// 여기서는 mutating 키워드를 붙이지 않아도 자유롭게 사용가능하다
func reset() {
width = 0.0
height = 0.0
}
// static으로 키워드를 붙이면 overriding을 허용 x
// static 대신 class로 하면 overriding 허용 하면서 프로토콜 요구사항도 만족
class func reset2() {
<#code#>
}
}
struct Size2: ResetTable {
var width = 0.0
var height = 0.0
// 값 형식의 struct 구조체에서 속성값을 변경하려면 func 키워드 앞에 mutating 키워드를 붙여야 한다.
mutating func reset() {
width = 0.0
height = 0.0
}
static func reset2() {
<#code#>
}
}