개발/Swift

인스턴스 메소드/ 클래식 메소드/ 스태틱 메소드

덤벨로퍼 2022. 3. 1. 12:29
class A {

 func instanceM(){
 }
 static func staticM(){
 }
 class func classM(){
 }
}

클래스에는 인스턴스 메소드 스태틱 메소드 클래스 메소드를 구현 할수있다.

이들의 차이점은 다음과 같다.

A.staticM()
A.classM()

A.instanceM() //Fail

스태틱 클래스 메소드와 달리 인스턴스 메소드는 인스턴스화 이후에 메소드를 사용 할수있다.

스태틱 클래스 메소드는 클래스에서 직접 메소드를 호출할수있다.

그러면 스태틱 클래스 메소드는 같은걸까?

이 둘의 차이점은 오버라이딩 가능 여부에 따라 갈린다.

클래스 메소드는 오버라이딩이 가능한 메소드이다.

반면 스태틱 메소드는 불가능 하다.

즉 상속을 받을때 클래스 메소드를 사용하며

그렇지 않을떄 스태틱 메소드를 사용한다.

struct A {

 static func staticM(){
 }

 class func classM(){ //ERROR
 }
}

struct 에서는 상속이 안되므로 클래스 메소드를 사용할수 없다.

스태틱 메소드만 사용이 가능하다.

class A {
  class func staticM(){}
}

class B : A {
  override class func staticM(){}
}

위와 같이 클래식 메소드를 상속 받아 오버라이딩 할 경우

클래스 메소드를 사용하면 된다. 스태틱 메소드의 경우 에러를 뱉을것이다.