Swift & iOS

[Swift] 상속 (Inheritance)

hammii 2022. 6. 15. 17:51
728x90
반응형

상속이란?

  • 부모가 자식에게 재산을 물려주는 행위
  • 클래스가 다른 클래스로부터 메서드, 프로퍼티 또는 다른 속성들을 상속받는 것
  • 다른 클래스에서 상속받지 않은 클래스를 베이스 클래스라고 한다.
  • final로 정의하게 되면 오버라이드 불가능, super class 불가능
class 클래스 이름: 부모클래스 이름 {
    // 하위 클래스 정의
}

 

상속 예시

Vehicle 클래스를 먼저 정의한다.

class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) miles per hour"
    }
    func makeNoise(){
        print("speaker on")
    }
}

Vehicle을 상속받는 Bicycle을 정의한다.

Bicycle은 Vehicle을 상속받기 때문에 currentSpeed를 설정해줄 수 있다.

class Bicycle: Vehicle {
    var hasBasket = false
}

var bicycle = Bicycle()
bicycle.currentSpeed = 15.0

Vehicle을 상속받는 Train 클래스도 정의해준다.

makeNoise 함수를 실행하면 오버라이드 된 함수 makeNoise 내에서

부모 클래스인 Vehicle의 makeNoise가 먼저 실행된 후, "choo choo"가 출력되는 것을 볼 수 있다.

class Train: Vehicle {
    override func makeNoise() {
        super.makeNoise()
        print("choo choo")
    }
}

let train = Train()
train.makeNoise()
// Prints "speaker on"
// Prints "choo choo"

Vehicle을 상속받는 Car를 정의하고, 이 Car를 상속받는 AutomaticCar를 정의한다.

따라서 description을 출력하게 되면 상속받은 것들이 합쳐져 출력되는 것을 볼 수 있다.

class Car: Vehicle {
    var gear = 1
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}

var car = Car()
car.currentSpeed = 30.0
car.gear = 2

class AutomaticCar: Car {
    override var currentSpeed: Double {
        didSet {
            gear = Int(currentSpeed / 10) + 1
        }
    }
}

let automatic = AutomaticCar()
automatic.currentSpeed = 35.0
print("AutomaticCar: \(automatic.description)")	// AutomaticCar: traveling at 35.0 miles per hour in gear 4

 

 

출처: [패스트캠퍼스] 30개 프로젝트로 배우는 iOS 앱 개발 with Swift 초격차 패키지 Online.

 

728x90
반응형