💡타입 메서드
타입 메서드는 타입 자체에 호출이 가능한 메서드를 말합니다.
메서드 앞에 다음과 같은 키워드를 사용하여 타입 메서드임을 나타내줍니다.
- 구조체 - 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 프로그래밍 책을 읽고 내용을 정리하여 작성하였습니다.
728x90
'Swift' 카테고리의 다른 글
[Swift] 클로저(Closure) (0) | 2021.01.16 |
---|---|
[Swift] 이니셜라이저(Initialization) (0) | 2021.01.11 |
[Swift] 메서드(Method) - 인스턴스 메서드 (0) | 2021.01.09 |
[Swift] 프로퍼티(Property) - 타입 프로퍼티 (0) | 2021.01.09 |
[Swift] 프로퍼티(Property) - 프로퍼티 감시자 (0) | 2021.01.08 |