상속
상속
-Swift에서 상속은 클래스 간의 코드 및 속성을 공유하는 메커니즘을 제공한다
-상속은 기존 클래스에서 새로운 클래스를 만들고 기존 클래스의 특성(속성과 메서드)을 재사용 하면서 새로운 기능을 추가할 수 있도록 해줌(서브 클래싱)
-상속의 장점 두 가지
-1. 코드 재사용성 : 기존 클래스의 특성을 재사용하여 중복을 피하고 유지보수성을 높임
-2. 계층구조 : 부모 클래스와 자식 클래스 간에 계층 구조 형성. 다양한 추상화와 분류 가능
override
-override 키워드는 부모 클래스에서 상속받은 메서드, 속성 또는 서브스크립트를 자식 클래스에서 재정의함
-자식 클래스에서 부모 클래스의 메서드를 재정의하여 새로운 구현을 제공할 수 있다
super
-super 키워드는 자식 클래스에서 부모 클래스의 메서드, 속성 또는 초기화 메서드를 호출할 때 사용
-부모 클래스의 메서드를 호출하거나 부모 클래스의 초기화 메서드를 호출하는 데 사용
-super.method() 또는 super.property 와 같이 사용하여 부모 클래스의 기능을 호출
final
-final 키워드는 클래스, 메서드, 속성 또는 서브스크립트를 표시하여 상속이 불가하도록 만드는 것
-final 키워드가 클래스에 사용되면 해당 클래스는 상속이 불가
-메서드, 속성, 서브스크립트에 사용될 경우 해당 멤버들을 재정의(override)할 수 없음
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()
// 출력: Some generic sound
// Bark!
--------------------------------------------------------------------------------------------------
// 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")
// }
}