스위프트에서 class func 와 static func 는 둘다 클래스 레벨에서 정의되는 메서드입니다.
두 가지의 주요 차이점은 상속과 관련이 있습니다.
class func 는 클래스 계층 구조에서 메서드가 상속되고 재정의 될 수 있음을 나타냅니다.
서브클래스에서 class func 로 정의된 메러드를 오버라이드하여 새로운 구현을 제공할 수 있습니다.
class A {
class func someClassFunc() {
print("Class A's class func")
}
}
class B: A {
override class func someClassFunc() {
print("Class B's class func")
}
}
let instanceA: A = B()
instanceA.someClassFunc() // 출력: "Class B's class func"
static func는 메서드가 상속되지 않고, 오버라이드될 수 없음을 나타냅니다.
서브클래스에서 static func로 정의된 메서드를 동일한 이름으로 다시 정의하더라도, 부모 클래스의 메서드가 가려진 채로 유지됩니다.
class X {
static func someStaticFunc() {
print("Class X's static func")
}
}
class Y: X {
static func someStaticFunc() {
print("Class Y's static func")
}
}
let instanceX: X = Y()
instanceX.someStaticFunc() // 출력: "Class X's static func"
class func는 클래스 계층 구조에서 상속과 오버라이드가 가능한 메서드이며, static func(=final class func)는 상속되지 않고 오버라이드되지 않는 메서드입니다.
참고(출처) : 개발하는 정대리, 야곰(Swift5)