dev._.note

[Swift] 상속(Inheritance) 본문

Dev/SWIFT

[Swift] 상속(Inheritance)

Laena 2023. 11. 30. 16:12

📌 상속(Inheritance)

Swift에서 상속(Inheritance)은 클래스(Class) 간에 코드 및 속성을 공유하는 메커니즘을 제공. 상속은 기존 클래스에서 새로운 클래스를 만들고, 기존 클래스의 특성(속성과 메서드)을 재사용하면서 새로운 기능을 추가할 수 있도록 해줌(서브 클래싱).

 

상속사용의 장점:

  1. 코드 재사용성: 기존 클래스의 특성을 재사용하여 중복을 피하고 유지보수성을 높일 수 있습니다.
  2. 계층 구조: 부모 클래스와 이를 상속받는 자식 클래스 간에 계층 구조를 형성하여 다양한 수준의 추상화와 분류를 가능하게 합니다.
  • override
    • override 키워드는 부모 클래스에서 상속받은 메서드, 속성 또는 서브스크립트를 자식 클래스에서 다시 정의할 때 사용.
    • 자식 클래스에서 부모 클래스의 메서드를 재정의하여 새로운 구현을 제공.
    • 메서드, 속성, 서브스크립트를 재정의하기 위해서는 override 키워드를 사용해야 함.
  • super
    • super 키워드는 자식 클래스에서 부모 클래스의 메서드, 속성 또는 초기화 메서드를 호출할 때 사용.
    • 부모 클래스의 메서드를 호출하거나 부모 클래스의 초기화 메서드를 호출하는 데 사용.
    • super.method() 또는 **super.property**와 같이 사용하여 부모 클래스의 기능을 호출할 수 있음.
  • final
    • final 키워드는 클래스, 메서드, 속성 또는 서브스크립트를 표시하여 상속이 불가능하도록 만듬.
    • final 키워드가 클래스에 사용되면 해당 클래스는 상속 불가능.
    • 메서드, 속성, 서브스크립트에 사용될 경우, 해당 멤버들을 재정의(Override)불가능.
  • 참고 자료: The Swift Programming Language - Inheritance
 

Documentation

 

docs.swift.org

// 부모 클래스(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")
    // }
}

'Dev > SWIFT' 카테고리의 다른 글

[Swift] 계산기 만들기  (0) 2023.12.01
[Swift] 초기화(Initialization)  (1) 2023.11.30
[Swift] Class와 Struct, Enum  (0) 2023.11.30
[Swift] radix  (0) 2023.11.29
[Swift] 객체지향(OOP/Object-Oriented-Programming)  (0) 2023.11.29