GGURUPiOS

[Swift] instance, class, static method에 대해 알아보기 본문

Swift/문법 파헤치기

[Swift] instance, class, static method에 대해 알아보기

꾸럽 2023. 11. 3. 22:01

안녕하세요

이번시간에는 

메서드에대해 알아보도록 하겠습니다.


메서드? (함수랑 뭐가다르지?)

메서드는 특정 타입과 연관된 함수입니다.

클래스, 구조체, 열거형 모두 인스턴스 메서드를 정의할 수 있습니다.

이는 주어진 타입의 특정 기능을 캡슐화 합니다.

 

인스턴스 메서드

특정 타입의 인스턴스에 속하는 함수입니다.

인스턴스 메서드는 인스턴스 프로퍼티에 접근하고 수정하는 방법을 제공 또는, 관련 기능을 제공함 

 

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}

 

위의 예제에서 보면 단순히 숫자를 세는 Counter라는 클래스를 정의하고 

관련 메서드를 추가한 예제입니다.

 

하지만 구조체, 열거형 에서 인스턴스의 프로퍼티 내용을 바꾸기 위해서는 특별한 키워드를 작성해야 하는데요.

https://shindo.tistory.com/54

 

[Swift] Struct와 Mutating 키워드(구조체에 대한 고찰)

안녕하세요. 이번시간에는 수도없이 만나는 Structures에 대해 이야기해보고자 합니다 Structures가 무엇인지 알아보고, 또 Class와의 차이까지 알아보도록 할게요 struct? structures? struct라는 키워드를

shindo.tistory.com

 

위의 글에 자세히 기술해 두었습니다.

간단히 말하자면 mutating 키워드를 앞에 붙여야만 인스턴스의 프로퍼티를 수정하는 메서드를 작성할 수 있습니다.

 


타입 메서드 (Static, Class) 

 

Static

물론, 인스턴스 생성 없이 타입 자체에서 호출되는 메서드를 정의할 수도 있습니다

앞에 static 키워드를 붙여, 타입 메서드임을 명시해주면 됩니다.

 

Class

그렇다면 class method는 무엇일까요?

class는 원래 타입메서드는 오버라이드가 안되지만, class 키워드는 상속가능한 타입메서드임을 알려줄 수 있습니다.

 

그렇다면 더 이상 상속할수 없다는 final 키워드와 class 키워드를 같이 쓰면 어떻게 될까요?

final class 는 static 과 같은 기능 아닌가..? 라는 의문이 듭니다.

 

기능은 똑같지만, 상속이 여러 계층에 걸쳐서 받고 있을 때, 

결국 final class 키워드는 여기까지만 오버라이드 가능! 이런느낌으로 쓰는것 같습니다.

(static은 애초에 상속이 불가능 하니까요)

 


출처

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/methods/

 

Documentation

 

docs.swift.org

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