HIT해

[Swift 기초문법 - 13] 상속 본문

Swift/Swift 기초문법

[Swift 기초문법 - 13] 상속

힛해 2024. 7. 11. 23:40
728x90

Swift에서 상속은 클래스가 다른 클래스의 특성과 동작을 물려받는 것을 의미한다.

상속을 통해 코드 재사용성을 높이고, 객체 지향 프로그래밍의 강력한 기능을 활용할 수 있다!

상속의 기본 개념

Swift에서 클래스는 다른 클래스의 속성과 메서드를 상속받을 수 있다. 상속받는 클래스를 서브클래스(subclass),

상속해주는 클래스를 슈퍼클래스(superclass)라고 한다.

서브클래스는 슈퍼클래스의 모든 특성과 동작을 물려받으며, 필요에 따라 이를 확장하거나 재정의할 수 있다!

 

class Vehicle {
    var currentSpeed = 0.0
    
    func describe() -> String {
        return "현재 속도는 \(currentSpeed)km/h 입니다."
    }
}

class Car: Vehicle {
    var gear = 1
    
    override func describe() -> String {
        return super.describe() + " 기어는 \(gear)단입니다."
    }
}

let myCar = Car()
myCar.currentSpeed = 100.0
myCar.gear = 3
print(myCar.describe()) // 현재 속도는 100.0km/h 입니다. 기어는 3단입니다.

 

Car는 currentSpeed라는 요소를 가지고 있지 않음에도 선언이후 사용할 수 있고 정의된 함수도 override함으로써 사용할 수 있다.

이때 super를 붙여 상위의 함수를 사용하겠다고 해주어야한다.

이 예제에서 Car 클래스는 Vehicle 클래스를 상속받아 currentSpeed 속성과 describe 메서드를 물려받았다. Car 클래스는 gear라는 새로운 속성을 추가하고, describe 메서드를 재정의하여 추가 정보를 제공한다!

메서드 재정의 (Overriding)

서브클래스는 슈퍼클래스의 메서드를 재정의하여 고유한 동작을 정의할 수 있다. 이때 override 키워드를 사용하여 슈퍼클래스의 메서드를 재정의하고 있음을 명시해야 한다!

class Bicycle: Vehicle {
    override func describe() -> String {
        return "자전거 - " + super.describe()
    }
}

let myBike = Bicycle()
myBike.currentSpeed = 25.0
print(myBike.describe()) // 자전거 - 현재 속도는 25.0km/h 입니다.

Bicycle 클래스는 Vehicle 클래스의 describe 메서드를 재정의하여 "자전거 - "라는 문자열을 추가로 반환한다. super 키워드는 슈퍼클래스의 메서드를 호출할 때 사용된다!

속성 재정의 (Property Overriding)

속성도 메서드와 마찬가지로 재정의할 수 있다. 이때 속성의 getter와 setter를 재정의하여 원하는 동작을 정의할 수 있다!

class ElectricCar: Car {
    var batteryLevel = 100
    
    override var currentSpeed: Double {
        didSet {
            if currentSpeed > 120 {
                currentSpeed = 120
            }
        }
    }
}

let myElectricCar = ElectricCar()
myElectricCar.currentSpeed = 150.0
print(myElectricCar.currentSpeed) // 120.0

ElectricCar 클래스는 Car 클래스의 currentSpeed 속성을 재정의하여 속도가 120을 넘지 않도록 제한하고 있다. didSet 관찰자를 통해 속성 값이 변경될 때마다 특정 로직을 실행할 수 있다!

결론

Swift에서 상속은 코드 재사용성과 확장성을 높이는 중요한 개념이다. 상속을 통해 클래스 간의 관계를 정의하고, 공통된 동작을 쉽게 공유할 수 있다. 상속을 활용하여 더 구조적이고 유지보수하기 쉬운 코드를 작성해 보자!