[swift] 상속과 프로토콜 적합성의 관계 이해하기

목차


상속

상속은 객체지향 프로그래밍에서 사용되는 중요한 개념으로, 부모 클래스의 특성과 동작을 자식 클래스가 물려받아 재사용하는 것을 의미합니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다. Swift에서는 클래스 간의 단일 상속만 지원되며, 부모 클래스는 superclass로, 자식 클래스는 subclass로 불립니다.

class Vehicle {
    var speed: Double

    init(speed: Double) {
        self.speed = speed
    }

    func start() {
        // Vehicle의 동작
    }
}

class Car: Vehicle {
    var brand: String

    init(speed: Double, brand: String) {
        self.brand = brand
        super.init(speed: speed)
    }

    override func start() {
        super.start()
        // Car의 동작
    }
}

위 코드에서 Car 클래스는 Vehicle 클래스를 상속받아 speed 속성과 start() 메서드를 사용할 수 있습니다.

프로토콜 적합성

프로토콜은 메서드, 속성 및 기타 요구 사항의 청사진을 정의하는데 사용됩니다. 클래스, 구조체, 열거형은 프로토콜을 채택하여 해당 요구 사항을 충족시킬 수 있습니다. 이를 통해 개체가 특정 동작 또는 특성을 가질 수 있도록 정의할 수 있습니다.

protocol Printable {
    func printDetails()
}

class Document: Printable {
    func printDetails() {
        // 문서의 세부 정보 출력
    }
}

위 코드에서 Document 클래스는 Printable 프로토콜을 채택하여 printDetails() 메서드를 구현합니다.

상속과 프로토콜 적합성의 관계

Swift에서 클래스는 단일 상속만을 지원하지만, 여러 프로토콜을 채택하여 개체의 동작과 특성을 정의할 수 있습니다. 따라서, 상속을 통해 공통 동작을 재사용하고, 프로토콜을 통해 다양한 동작을 구현할 수 있습니다.

protocol Sound {
    func makeSound()
}

class Animal {
    // 동물의 특성
}

class Dog: Animal, Sound {
    func makeSound() {
        // 개의 소리
    }
}

위 코드에서 Dog 클래스는 Animal 클래스를 상속받고, Sound 프로토콜을 채택하여 makeSound() 메서드를 구현합니다.

결론

Swift에서는 상속을 통해 클래스 간의 관계를 정의하고, 프로토콜을 통해 다양한 동작을 포함시킬 수 있습니다. 이를 통해 유연하고 확장 가능한 코드를 작성할 수 있으며, 객체의 동작과 특성을 명확하게 정의할 수 있습니다.

참고문헌: