class Dog {
static var species = "Dog"
var name: String
var weight: Double
init(name: String, weight: Double) {
self.name = name
self.weight = weight
}
func sit() {
print("\(name)가 앉았습니다.")
}
func trainning() {
print("월월 저는 \(Dog.species)입니다.")
sit()
sit()
self.sit() // self 키워드는 명확하게 지칭하는 역할일 뿐
}
func changeName(newName name: String) {
self.name = name
}
static func letmeKnow() { // 타입 메서드에서, 타입속성에 접근시에는 타입으로 접근하지 않아도 됨.
print("좋은 항상 \(Dog.species) 입니다.") // species 으로 생략 가능
}
}
let bori = Dog(name: "보리", weight: 20.0)
bori.sit()
Dog.letmeKnow()
/**
타입 메서드 사용 예시
*/
Int.random(in: 1...3)
Double.random(in: 1.2...4.5)
/**
클래스 - 타입 메서드 상속
- 상속부분을 공부하고 다시 살펴볼 예정
- 타입 메서드를 상속 시 재정의가능 하도록 하려면 ===> static 키워드를 상속가능한 class 키워드로 바꿔야함.
*/
// 상위 클래스
class SomeClass {
class func someTypeMethod() { // 타입 메서드
print("타입과 관련된 공통된 기능의 구현")
}
}
SomeClass.someTypeMethod()
// 상속한 서브 클래스
class SomeThingClass: SomeClass {
override class func someTypeMethod() {
print("타입과 관련된 공통된 기능의 구현(업그레이드)")
}
}
SomeThingClass.someTypeMethod()