상속
Swift에서 상속은 클래스 간에 코드 및 속성을 공유하도록 제공한다.
상속은 기존 클래스에서 새로운 클래스를 만들고, 기존 클래스의 특성을 재사용하면서 새로운 기능을 추가할 수 있도록 해준다.
상속의 장점
기존 클래스의 특성을 재사용하여 중복을 피하고 유지보수성을 높여 코드의 재사용성이 좋아진다.
부모 클래스와 이를 상속받는 자식 클래스 간에 계층 구조를 형성하여 다양한 수준의 추상화와 분류를 가능하게 한다.
상속 키워드
override
override 키워드는 부모 클래스에서 상속받은 메서드, 속성을 자식클래스에서 다시 정의할 때 사용
자식 클래스에서 부모 클래스의 메서들를 재정의하여 새로운 구현을 제공할 수있습니다.
super
super는 자식 클래스에서 부모 클래스의 메서드,속성 또는 초기화 메서드를 호출할 때 사용한다
ex)super.method() or super.property
final
final키워드는 클래스, 메서드, 속성을 상속이 불가능하도록 만든다
final 키워드가 클래스에 사용되면 해당 클래스는 상속불가 (override)
// 부모 클래스(Person) 선언
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func greet() {
print("Hello, my name is \(name).")
}
}
// Person 클래스를 상속받는 자식 클래스(Student) 선언
class Student: Person {
var studentID: Int
init(name: String, age: Int, studentID: Int) {
self.studentID = studentID
super.init(name: name, age: age)
}
func study() {
print("\(name) is studying.")
}
}
// Student 클래스 인스턴스 생성 및 사용
let john = Student(name: "John", age: 20, studentID: 123)
john.greet() // 출력: Hello, my name is John.
john.study() // 출력: John is studying.
// override, super 키워드 예시
class Animal {
func makeSound() {
print("Some generic sound")
}
}
class Dog: Animal {
override func makeSound() {
super.makeSound() // 부모 클래스의 메서드 호출
print("Bark!")
}
}
let dog = Dog()
dog.makeSound()
// final 키워드 예시
final class Vehicle {
final var wheels: Int = 0
final func makeSound() {
print("Some generic sound")
}
}
// Error: 'SubVehicle' cannot inherit from final class 'Vehicle'
class SubVehicle: Vehicle {
// Error: 'wheels' cannot override 'final' var from superclass
// override var wheels: Int = 4
// Error: 'makeSound()' cannot override a final method
// override func makeSound() {
// print("Custom sound")
// }
}