Programming/Swift(iOS)
Swift 상속
홍열
2021. 4. 3. 00:00
728x90
일반적인 상속은 다른 곳에서 많이 다루니, 여기서는 상속에서 좀 특이한것들 다뤄볼까 합니다.
static 메서드, 프로퍼티는 상속 가능할까?
class Car {
static func foo() {
print("Car foo")
}
}
class Truck:Car {
override static func foo() {
print("Truck foo")
}
}
위와 같이 쓰게 되면 "Cannot override static method" 를 발생 시킵니다.
static method는 상속이 불가능하다는 메세지입니다.
이 문제를 해결하기 위해서는 "class" keyword를 사용하면 됩니다.
class Car {
class func foo() {
print("Car foo")
}
}
class Truck:Car {
override class func foo() {
print("Truck foo")
}
}
let truck = Truck()
Car.foo()
Truck.foo()
self vs Self
위 두개의 차이점은 뭘까요?
self : class의 인스턴스의 self
Self : class의 Self, 자기 자신에 대한 동적 클래스
-> 타입에 대한 정보를 실행시간에 동적으로 접근 가능하다.
각 Class의 name을 return해주는 프로퍼티가 있다고 해봅시다.
Car에서 class 프로퍼티이며, Truck에서도 이 class 프로퍼티를 상속 구현해줘야합니다.
class Car {
class var name:String {
return "Car"
}
}
class Truck:Car {
override class var name:String {
return "Truck"
}
}
print(Car.name)
print(Truck.name)
번거롭습니다. 매번 클래스 생성시에 구현을 해줘야합니다.
상속하기때문에 부모 클래스에만 name을 두고, 생성되는 객체의 타입에 따라서 출력하고 싶으면 어떻게 해야될까요?
이때 사용되는 것이 "Self"입니다.
class Car {
class var name:String {
return "\(Self.self)"
}
}
class Truck:Car {
}
print(Car.name) //Car
print(Truck.name) //Truck