Class function과 Static function
2022. 2. 28. 16:55ㆍiOS/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"
}
}
스택 오버 플로우에 좋은 예시가 있어 첨부한다.
참고
'iOS > Swift 문법' 카테고리의 다른 글
Using Existential and Generic feat.Dispatch (1) | 2024.09.17 |
---|---|
복잡한 JSON 디코딩하기 - NestedContainer, custom init (0) | 2024.09.17 |
면접 질문: Closure에서 weak self를 사용하지 않아도 되는 경우? (0) | 2024.09.08 |
Map과 FlatMap, CompactMap (0) | 2022.03.21 |
iOS XCTest 코드 (1) (0) | 2022.03.02 |