-
Swift 상속Programming/Swift(iOS) 2021. 4. 3. 00:00728x90
일반적인 상속은 다른 곳에서 많이 다루니, 여기서는 상속에서 좀 특이한것들 다뤄볼까 합니다.
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
'Programming > Swift(iOS)' 카테고리의 다른 글
Swift 오류 처리 - 2 (0) 2021.04.06 Swift 오류 처리 - 1 (0) 2021.04.06 Swift 초기화 메서드 (0) 2021.04.02 Swift Optional - 2 (0) 2021.04.02 Swift Optional - 1 (0) 2021.04.02