Swift

[Swift] 메서드(Method) - 타입 메서드

💡타입 메서드

타입 메서드는 타입 자체에 호출이 가능한 메서드를 말합니다.

 

메서드 앞에 다음과 같은 키워드를 사용하여 타입 메서드임을 나타내줍니다.

  • 구조체 - static
  • 클래스 - static(상속 후 메서드 재정의 불가능), class(상속 후 메서드 재정의 가능)
class AClass {
    static func staticTypeMethod() {
        print("AClass staticTypeMethod")
    }
    
    class func classTypeMethod() {
        print("AClass classTypeMethod")
    }
}

class BClass: AClass {
    /*
     // 오류 발생! 재정의 불가!
     override static func staticTypeMethod() {
     
     }
     */
    override class func classTypeMethod() {
        print("BClass classTypeMethod")
    }
}

AClass.staticTypeMethod()   // AClass staticTypeMethod
AClass.classTypeMethod()    // AClass classTypeMethod
BClass.classTypeMethod()    // BClass classTypeMethod

 

self 프로퍼티

타입 메서드의 self는 타입 그 자체를 가리킵니다.

따라서 타입 메서드에서 self 프로퍼티를 사용하면 타입 프로퍼티 및 타입 메서드를 호출할 수 있습니다.

// 시스템 음량은 한 기기에서 유일한 값이어야 합니다.
struct SystemVolume {
    // 타입 프로퍼티를 사용하면 언제나 유일한 값이 됩니다.
    static var volume: Int = 5
    
    // 타입 프로퍼티를 제어하기 위해 타입 메서드를 사용합니다.
    static func mute() {
        self.volume = 0 // SystemVolume.volume = 0 과 같은 표현입니다
                        // Self.volume = 0 과도 같은 표현입니다.
    }
    
}

// 내비게이션 역할은 여러 인스턴스가 수행할 수 있습니다.
class Navigation {
    
    // 내비게이션 인스턴스마다 음량을 따로 설정할 수 있습니다.
    var volume: Int = 5
    
    // 길 안내 음성 재생
    func guideWay() {
        // 내비게이션 외 다른 재생원 음소거
        SystemVolume.mute()
    }
    
    func finishGuideWay() {
        // 기존 재생원 음량 복구
        SystemVolume.volume = self.volume
    }
}

SystemVolume.volume = 10

let myNavi: Navigation = Navigation()

myNavi.guideWay()
print(SystemVolume.volume) // 0

myNavi.finishGuideWay()
print(SystemVolume.volume)  // 5

 

인스턴스 메서드에 대한 설명은 다음 포스팅을 참고해주세요 :)

2021/01/09 - [Swift] - [Swift] 메서드(Method) - 인스턴스 메서드

 

[Swift] 메서드(Method) - 인스턴스 메서드

💡 메서드(Method) 메서드는 특정 타입에 관련된 함수를 뜻합니다. 클래스, 구조체, 열거형 등 👉 실행하는 기능을 캡슐화한 인스턴스 메서드 정의 가능 👉 타입 자체와 관련된 기능을 실행하는

bes24.tistory.com

 

이 글은 Swift 프로그래밍 책을 읽고 내용을 정리하여 작성하였습니다.
728x90