static func & class func

라무·2023년 8월 9일
0

정의

메모리에 올리지 않아도 바로 호출할 수 있는 함수를 의미한다

class func

인스턴스를 생성하지 않고도 클래스에 바로 접근해서 메소드 호출이 가능

예시

일반적인 class의 메소드들은 myFriend처럼 인스턴스를 생성한 후에 class의 메소드를 .을 이용해서 사용할 수 있다

하지만 class func은 굳이 인스턴스를 생성하지 않고도 클래스에 바로 접근해서 메소드 호출이 가능하다!!

class Friend {
	func sayHi() {
		print("hi")
	}
	
	class func sayBye() {
		print("bye")
	}
}

//일반적인 형태는 인스턴스를 생성해야 해당 메소드 호출이 가능하다
let myFriend = Friend()
myFriend.sayHi()

//인스턴스를 생성하지 않아도 클래스에 바로 접근해서 메소드 호출이 가능하다
Friend.sayBye()

static func

class안에서 func을 만들어줄 때 static이라고 적으면 된다

class func과 동일하게 인스턴스를 생성하지 않고도 메소드에 바로 접근해서 호출이 가능하다

예시

class Friend {
	func sayHi() {
		print("hi")
	}
	
	static func sayHoHo() {
		print("hoho")
	}
}

//일반적인 형태는 인스턴스를 생성해야 해당 메소드 호출이 가능하다
let myFriend = Friend()
myFriend.sayHi()

//인스턴스를 생성하지 않아도 클래스에 바로 접근해서 메소드 호출이 가능하다
Friend.sayHoHo()

static func과 class func의 차이

static func

static func은 final class func과 동일하다 → 즉, static func은 override가 되지 않는다

그럼 여기서 final의 의미는 뭘까?

  • final은 상속이 불가능하다는 것을 의미한다 즉, override가 되지 않는다
  • 상속을 막는 키워드라고 할 수 있다

class func

override가 가능하다 즉, 상속이 가능하다

예시

class Friend {
	func sayHi() {
		print("hi")
	}
	
	class func sayBye() {
		print("bye")
	}
	
	static func sayHoHo() {
		print("hoho")
	}
}

class BestFriend : Friend {
	class override func sayBye() {
		super.sayBye() //부모의 sayBye를 호출
		print("덮어썻음 say bye")
	
	//static이라서 override가 안됨
	func sayHoHo() {
		print("덮어썼음 hoho")
	}
}

//일반적인 형태는 인스턴스를 생성해야 해당 메소드 호출이 가능하다
let myFriend = Friend()
myFriend.sayHi()

//인스턴스를 생성하지 않아도 클래스에 바로 접근해서 메소드 호출이 가능하다
Friend.sayHoHo()
	

//일반적인 형태는 인스턴스를 생성해야 해당 메소드 호출이 가능하다
let myFriend = Friend()
myFriend.sayHi()

//인스턴스를 생성하지 않아도 클래스에 바로 접근해서 메소드 호출이 가능하다
Friend.sayHoHo()

BestFriend.sayBye()
//overrider가 안됨
//BestFriend.sayHoHo()

참고 블로그

What is the difference between static func and class func in Swift?

profile
ios 개발을 하고있는 라무의 사적인 기술 블로그

0개의 댓글