
Swift에서 super는 부모 클래스(상위 클래스)의 메서드, 프로퍼티, 서브스크립트에 접근할 수 있게 해주는 특별한 키워드입니다. 자식 클래스(하위 클래스)에서 부모 클래스의 구현을 호출하거나 접근할 때 사용합니다.
super는 가족 관계에서 "부모에게 물어보기"와 같습니다. 자식이 스스로 해결할 수 없는 일이 있거나, 부모가 이미 알고 있는 정보가 필요할 때, 자식은 부모에게 도움을 요청합니다. 마찬가지로 자식 클래스는 super 키워드를 통해 부모 클래스의 기능을 활용할 수 있습니다.
class Animal {
func makeSound() {
print("동물이 소리를 냅니다")
}
}
class Dog: Animal {
override func makeSound() {
// 부모 클래스의 메서드를 먼저 호출
super.makeSound()
// 추가 기능 구현
print("멍멍!")
}
}
let myDog = Dog()
myDog.makeSound()
// 출력:
// 동물이 소리를 냅니다
// 멍멍!
class Vehicle {
var numberOfWheels: Int
init(wheels: Int) {
self.numberOfWheels = wheels
}
}
class Car: Vehicle {
var brand: String
init(brand: String) {
self.brand = brand
// 부모 클래스의 초기화 메서드 호출
super.init(wheels: 4)
}
}
let myCar = Car(brand: "현대")
print("내 차는 \(myCar.brand) 브랜드이고, \(myCar.numberOfWheels)개의 바퀴가 있습니다.")
// 출력: 내 차는 현대 브랜드이고, 4개의 바퀴가 있습니다.
class CustomTableViewCell: UITableViewCell {
override func prepareForReuse() {
// 부모 클래스의 prepareForReuse 메서드를 먼저 호출
super.prepareForReuse()
// 추가적인 초기화 작업 수행
// ...
}
}
부모 클래스의 기능 유지: super를 사용하여 부모 클래스의 중요한 기능을 실행한 후 자식 클래스에서 추가 기능을 구현할 수 있습니다.
초기화 과정의 안전성: 초기화 메서드에서 super.init()을 호출하면 부모 클래스가 올바르게 초기화되어 안전한 객체 생성이 보장됩니다.
코드 재사용: 부모 클래스에 이미 구현된 기능을 재사용하여 코드 중복을 줄일 수 있습니다.
프레임워크 호환성: UIKit과 같은 프레임워크를 사용할 때, super 호출을 통해 프레임워크의 기본 동작을 유지하면서 추가 기능을 구현할 수 있습니다.
super를 사용하지 않으면 부모 클래스의 중요한 기능이 실행되지 않아 예상치 못한 버그가 발생할 수 있으므로, 메서드를 오버라이드할 때는 적절한 시점에 super 호출을 포함하는 것이 중요합니다.