본문 바로가기
Swift 개발 이야기

class func vs static func in swift

by 방화동한량 2020. 12. 14.
728x90

굿데이 굿데이 여러분 오랜만입니다 코로나 시국에 집콕은 잘하고 계신지...

 

오늘은 swift에서 제공하는 함수의 형태 중에 class func 과 static func 의 차이점에 대해서 알아보려구 해여

 

이 둘은 타입 메소드로 생성자를 사용하지 않고도 바로 호출할 수가 있져?

 

일반 메소드의 경우에는 꼭 생성자를 만들어서 사용해야하기때문에 해당 객체에 종속되지만 타입 메소드들은 그렇지 않다는 차이점이 이씀다 간단히 예를 들어보게씀다

 

class TestModule {
    
    class func classTest() {
        print("CLASS TEST")
    }
    
    static func staticTest() {
        print("STATIC TEST")
    }   
}

class TestViewController: UIViewController {


	override func viewDidLoad() {
    	super.viewDidLoad()

    	TestModule.classTest() // "CLASS TEST"
        TestModule.staticTest() // "STATIC TEST"
    
    }
}

 

아주 간단하쥬? 두 함수 모두 동일하게 작동합니다.

 

그런데 이 두가지를 왜 나눠놓느냐? 물으신다면 그걸 이제 알아보려구 한거니까 가보시져

 

일단 TestModule 을 상속받는 SubTestModule 클래스를 만들어보게씀다

 

class SubTestModule: TestModule {
    
    override class func classTest() {
        print("SUB CLASS TEST")
    }
    
    override static func staticTest() { // override 되지 않음 오류 발생
            print("SUB STATIC TEST")
    }

}

 

어랍쇼 static func 은 오버라이드가 되지 않네요! 즉 class func 은 자식 클래스에서 상속이 가능하지만, static func 은 자식 클래스에서 상속이 불가능하다는 차이점을 찾아내었읍니다

 

그렇다면 static func 은 final class func 와 동일하게 작동한다는 점도 유추해낼 수 있겠쥬?

 

아주 간단하게 이 두 함수 형태의 차이점을 알아보았읍니다

 

결국 static func 와 final class func 는 취향차이겠지만 짧은 static 을 쓰는게 더 편해보이는군여

 

단어를 생각해보면 class 기 때문에 상속이 가능, static 으로 고정된 친구기 때문에 상속이 불가능하다! 라고 생각하면 좀 더 이해하기 편할거 같다고 생각해봅니다

 

그럼 다음 시간에 또 만나여 모두 안녕~~~