Swift

[Swift] 타입메소드, 인스턴스 메소드란

devharrry 2020. 1. 3. 20:47

인스턴스 메소드란

클래스, 구조체, 열거형의 인스턴스에 속한 메소드를 의미합니다. 

 

예제

class  Temp {
  func instanceMethod() {
	print("instanceMethod")
  }
}

let temp = Temp()
temp.instanceMethod()


인스턴스 메소드를 호출하기 위해서는 Temp를 인스턴스화 후 해당 메소드를 호출해야합니다. 인스턴스 없이 독립적으로 호출할 수 없습니다.

타입 메소드란

타입 자체에서 호출할 수 있는 메소드를 의미합니다. 

클래스를 위한 타입메소드는 func 키워드 앞에 class 키워드를 작성합니다.
구조체와 열거형을 위한 타입메소드는 func 키워드 앞에 static 키워드를 작성합니다.

 

예제

// class 
class Temp {
  class func classMethod() {
	print("classMethod")
  }
  static func staticMethod() {
	print("classMethod")
  }
}

Temp.classMethod()
Temp.staticMethod()

// struct
struct Temp {
	// 불가능
  class func classMethod() {
	print("classMethod")
  }
  static func staticMethod() {
	print("classMethod")
  }
}

구조체, 열거형에서는 class메소드를 선언하면 컴파일 에러가 발생합니다. 그 이유는 상속이 불가능하기 때문입니다. 


class, static 가장 큰 차이점은 오버라이드가 가능한지에 대한 여부입니다. 


하지만 class 키워드를 써도 final 키워드를 앞에 붙인다면 오버라이드를 막을 순 있습니다.