일모도원(日暮途遠) 개발자

[Swift] class func vs static func 본문

프로그래밍 언어/스위프트

[Swift] class func vs static func

달님개발자 2022. 7. 20. 11:50

 스위프트에는 static 함수말고 class함수도 있다.

class MyClass {
  func myFunc() {}
  class func myClassFunc() {}
  static func myStaticFunc() {}
}

일반적인 함수는 인스턴스 메소드(Instance method)로 객체를 생성한후에 부른다.

static함수는 객체를 생성하지 않고 MyClass.myStaticFunc()처럼 클래스명에 붙여서 부르면 되는데 class func는 뭘까?

 

차이점은 class func는 상속이 된다. 이외는 static func(상속 안됨)와 똑 같다. 둘다 타입 메소드(type method)라 부른다.

class SubClass : MyClass {
  class func myClassFunc() {}
  static func myStaticFunc() {} //이건 안된다. 컴파일시 에러남.
}

근데 아직 class func을 만들어서 상속을 사용할때 사용할 케이스를 찾지 못했다. 언제 쓸까?

 

참고로 자바에서도 스태틱 메소드는 상속이 안된다.

자식 클래스에서도 부모클래스의 스태틱 메소드와 같은 이름의 스태틱 메소드를 가질수는 있지만 @Override 어노테이션을 붙일수 없다. 이를 Hiding이라고 부른다.