티스토리 뷰

iOS

swift static, class, final class

경표다 2020. 8. 2. 22:50

static 메소드

class 메소드

final class 메소드

이 셋의 차이가 뭘까?

사실 찾아보니 그리 헷갈리는 개념은 아니지만 개념 정리 겸 포스팅한다.

우선 셋 다 타입 메소드이다.

static 메소드, 타입 메소드이고 자식클래스에서 override 할 수 없다.

class 메소드, 타입 메소드이고 자식클래스에서 override 할 수 있다.

final class 메소드, 타입 메소드이고 자식클래스에서 override 할 수 없다.

 

이렇게만 보면 static이랑 final class랑 똑같은거 아닌가 싶다. 이 글을 포스팅하게 된 이유이기도 하다.

야곰님의 강의를 듣다가 이 둘이 동일한 기능을 한다는 말을 하셨다. 물론 맞는말이기도 하다. 당장은 일단 넘어가느라 이렇게 설명하신 것 같다.

(프로그래밍 언어 강의나 책을 읽다보면 초반에 기초 내용을 다루던 중에 후반에 다뤄야 할 내용이 나오면 일단 넘어가겠다 라며 넘어가는 경우가 많았던 것 같다.)

 

궁금증이 생겨서 찾아보니

https://stackoverflow.com/questions/29636633/static-vs-class-functions-variables-in-swift-classes

 

Static vs class functions/variables in Swift classes?

The following code compiles in Swift 1.2: class myClass { static func myMethod1() { } class func myMethod2() { } static var myVar1 = "" } func doSomething() { myClass.myMe...

stackoverflow.com

 

final class 는 부모클래스의 어떤 class 메소드를 override final func method() 이런 식으로 override 할 수 있지만 그 이후의 자식 클래스는 더 이상 그 메소드를 override 할 수 없게 되는것..

class Test1 {
	static func method() {
    }
}
class TestForTest1: Test1 {
	override static func method() {  // 불가!!!!
    }
}

class Test2 {
	class func method() {
    }
}
class TestForTest2: Test2 {
	override class func method() { // 가능!!!
    }
}
class TestForTestForTest2: TestForTest2 {
	final override class func method() { // 가능!!
    }
}
class TestForTestForTestForTest2: TestForTestForTest2: {
	override class func method() { // 불가!!!!!
    }
}

대충 이런 식으로 예제를 만들어봤다.  (티스토리 코드블럭으로 막 작성한거라 오타가 있는지는 모르겠다.)

 

보다시피 final class 는 부모 클래스의 class 메소드를 override 할 수 있지만 그 이후는 상속할 수 없게 막아버린다.

final,, 의미가 확 들어온다.

나 까지가 찐막! 이제 그만! final! 이런 느낌,,

'iOS' 카테고리의 다른 글

[번역] WatchKit  (0) 2022.01.20
iOS status bar style 변경하기  (1) 2021.11.18
Bastard Injection  (0) 2021.08.17
iOS TextField memory leak  (0) 2021.07.16
iOS App Life Cycle  (2) 2021.07.11