Class function과 Static function

2022. 2. 28. 16:55iOS/Swift 문법

작성 이유

HealthKit Weekly를 작성 중에 WWDC 프로젝트 예제에서 class func이 사용되었다. static과 class function이 Type method라는 것만 알고 정확한 차이를 몰라 작성하게 되었다.

 

먼저 둘의 차이는 재정의 가능 여부이다. class function은 상속받아서 재정의 가능하다.

 

Method는 크게 Instance Method와 Type Method로 나눌 수 있다.

Instance Method

클래스 인스턴스가 생성된 후, 인스턴스가 주체가 되어 실행하는 메소드이다.

일반적인 클래스 내에 선언된 메소드이다.

Type Method

클래스 인스턴스없이, 실행가능한 메소드이다. 

사용 이유는 메소드 선언이 필요하지만, 인스턴스가 필요 없는 경우이다.

주의 할 점은 Type Method 내에서는 static 프로퍼티만 사용가능하다. non static는 사용이 불가능하다.

Class와 Static

static final func fetch() {
 loadData()
}
Static declarations are already final
이라는 에러가 난다. static에는 final이라는 의미가 포함되어 있다.(swift 기준 다른 언어는 다를 수도 있다.)
class Parent {
  class func func1() -> String {
    return "func1"
  }

  static func func2() -> String {
    return "func2"
  }

  /* same as above
  final class func func2() -> String {
    return "func2"
  }
  */
}

class Child : Parent {
  override class func func1() -> String {
    return "func1 in Child"
  }

  // ERROR: Class method overrides a 'final` class method
  override static func func2() -> String {
    return "func2 in Child"
  }
}

스택 오버 플로우에 좋은 예시가 있어 첨부한다. 

 

참고

https://stackoverflow.com/questions/25156377/what-is-the-difference-between-static-func-and-class-func-in-swift