[iOS_Swift] 타입 메서드 - class func과 static func의 차이

2022. 1. 28. 16:07Programming/iOS_Swift

  본론에 들어가기에 앞서, 타입 메서드가 무엇인지, 일반적으로 우리가 쓰는 인스턴스 메서드와 무슨 차이가 있는지 짚고 넘어가자.

 

Type Method(타입 메서드)란?

  공식문서에 따르면, 타입 메서드는 인스턴스 메서드와 달리 타입 그 자체에서 호출 되어지는 메서드라고 설명하고 있다. 즉 통상적으로 우리가 사용하는 인스턴스 메서드는 어떤 구조체나 클래스의 인스턴스를 만들어 준 뒤 메서드 접근이 가능했다. 그런데 타입 메서드의 경우, 인스턴스를 따로 만들어줄 필요 없이 타입에서 바로 접근이 가능하다.

  타입 메서드의 종류는 크게 static 키워드를 사용한 메서드 한 종류이나, 클래스의 경우 class 키워드를 사용해서 추가적으로 타입 메서드를 만들 수 있다. 단, class 키워드를 사용한 타입메서드의 경우 자식클래스가 해당 타입메서드를 오버라이딩할 수 있다!

 

class func vs static func

1. 오버라이딩이 가능한가?

  class 타입 메서드의 경우, 앞에서도 설명했듯이 오버라이딩이 가능하다. 그런데, static 타입 메서드의 경우 class 에서 쓰더라도 오버라이딩이 불가능하다. 오버라이딩을 강제로 해도 컴파일 에러가 일어난다.

  위의 예시를 보면, class 타입 메서드와, static 타입 메서드를 부모클래스인 Soldier에 만들어줬고 자식 클래스인 TopSolider가 두 타입 메서드를 오버라이딩했다. 그 후 다음과 같이 컴파일 에러가 발생했다.

 

2. 범용성

  클래스 내에서만 사용할 수 있는 class 타입 메서드와 달리 static 타입 메서드는 클래스, 구조체, 열거형 모두 사용할 수 있다. 즉 class 타입 메서드보다 범용성이 훨씬 좋다고 볼 수 있다.