Swift

Type Methods (static func & class func)

JoonSwift 2022. 3. 23. 14:28

이번 포스팅에서는 Type Methods 인 static func 그리고 class func 의 차이점에 대해서 정리해보려고 합니다.

Type Methods?

우선 Type Methods에 대해 간단하게 설명해보자면, Type에서 호출 되는 methods를 말하는데, 여기서 Type은 Classes, Structures, Enumerations가 될 수 있습니다. Instance methods는 Type의 Instance가 가지고 있는 methods를 호출한다고 하면,  Type methods는 Type 자체가 가지고 있는 methods를 호출하는 것입니다. 

static이라는 키워드를 func 앞에 붙이면서 선언할 수 있고, Classes의 경우에는 class 키워드를 static 대신에 사용할 수 있습니다.

static ? class ?

swift.org
Classes can use the class keyword instead, to allow subclasses to override the superclass’s implementation of that method.

우선 Swift.org 공식문서에 Type Methods 부분을 읽어보면 Classes의 경우에는 superclass의 메서드 구현을 subclass들이 override할 수 있도록 static 대신 class를 사용할 수 있다고 적어놓았습니다. 

override가 가능할 수 있게 class키워드를 사용한다. 그렇다면 static을 사용하면 override할 수 없다. 라는 차이점을 추측해볼 수 있고,

실제로 'Cannot override static method' 라는 에러 메시지가 등장합니다. 

즉, class func은 override가 가능하다. static func은 override가 불가능하다. 라는 차이점이 있습니다. 

final class func & static func

class func은 override가 가능하고, static func은 override가 불가능하다. 그렇다면, class func 앞에 final 키워드를 붙인것과 static과 같은 역할을 한다고 생각할 수 있습니다. 

또한 subclass에서 override 한 class func 앞에 final 을 붙이면 해당 subclass를 상속받는 subclass들 역시 override 할 수 없습니다.

정리

static func 그리고 class func의 차이점에 대해 알아보았습니다. class func은 Classes라는 타입 특성상 상속하여 override를 가능하게 하기 위한 Type methods 의 형태로 만들어 놓았고, subclasses에서 override가 필요없는 경우 static func을 사용하거나 class의 경우에는 static func 또는 final class func을 사용할 수 있겠습니다. 

'Swift' 카테고리의 다른 글

Swift ) What is AnyObject?  (0) 2022.04.06
Swift ) URL에 한글이 들어갈때? (addingPercentEncoding)  (0) 2022.03.29
Sequence  (0) 2022.01.28
Unowned?  (0) 2021.02.28
Dispatch(2) : Sync / Async / main / global  (0) 2021.01.13