스위프트에서는 상속과 프로토콜 채택을 통해 클래스와 구조체의 기능을 확장하고 재사용할 수 있습니다. 상속은 클래스에 대해서만 가능하며, 프로토콜 채택은 클래스, 구조체, 열거형 모두에게 적용할 수 있습니다.
상속
클래스 간에 상속은 부모 클래스의 속성과 메서드를 자식 클래스에서 재사용하고 확장할 수 있는 기능입니다. 다음은 상속을 사용하는 간단한 예시입니다.
class Animal {
func makeSound() {
print("Some sound")
}
}
class Dog: Animal {
override func makeSound() {
print("Bark bark!")
}
}
let myDog = Dog()
myDog.makeSound() // 출력: "Bark bark!"
자식 클래스인 Dog
는 부모 클래스인 Animal
을 상속받았으므로 makeSound
메서드를 재정의할 수 있습니다. 이렇게 메서드를 재정의하면 자식 클래스에서 원하는 동작을 수행할 수 있습니다.
프로토콜 채택
프로토콜은 특정한 속성이나 메서드를 가져야 하는 명세입니다. 클래스, 구조체, 열거형은 프로토콜을 채택하여 해당 프로토콜에서 요구하는 기능을 구현할 수 있습니다. 다음은 프로토콜을 채택하는 예시입니다.
protocol Runnable {
func run()
}
class Dog: Runnable {
func run() {
print("Running!")
}
}
let myDog = Dog()
myDog.run() // 출력: "Running!"
Runnable
프로토콜을 채택한 Dog
클래스는 run
메서드를 구현해야 합니다. 이로써 Dog
클래스는 Runnable
프로토콜의 요구사항을 충족시키고, run
메서드를 사용할 수 있습니다.
상속과 프로토콜 채택의 차이점
상속은 단일 클래스에서 다른 클래스로 속성과 메서드를 상속받을 수 있으므로, 부모 클래스의 모든 특성을 물려받습니다. 반면에 프로토콜 채택은 여러 프로토콜에서 요구하는 동작을 클래스, 구조체, 열거형 등에서 독립적으로 구현할 수 있습니다. 따라서 다중 상속이 필요한 경우에는 프로토콜 채택을 사용해야 합니다.
결론
상속과 프로토콜 채택은 스위프트에서 클래스와 구조체의 기능을 확장하고 재사용하는 방법입니다. 상속은 단일 클래스 간에 속성과 메서드를 물려받아 재정의할 수 있으며, 프로토콜 채택은 여러 프로토콜에서 요구하는 기능을 구현할 수 있습니다. 이러한 개념들을 잘 이해하고 적절히 활용하면 코드의 재사용성과 확장성이 향상될 수 있습니다.
참고 자료: