swift 기본문법 - 상속(Inheritance)

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
인프런, 야곰의 스위프트 기본문법 강좌를 듣고 정리하였습니다.


상속(Inheritance)

  • 스위프트에서의 상속은 클래스, 프로토콜 등에서 사용 가능
  • 열거형, 구조체에는 상속이 불가능
  • 다중상속은 지원하지 않음
class 이름: 상속받을 클래스 이름 {
  구현부
}

예시는 아래와 같다.

class Person {
  var name: String = ""

  func selfIntroduce() {
    print("저는 \(name) 입니다.")
  }

  // final 키워드를 사용해 자식클래스에서 재정의를 방지할 수 있다 - override 불가능
  final func sayhello() {
    print("hello")
  }

  // 타입메서드 - 재정의 불가
  static func typeMethod() {
    print("type method - static")
  }

  class func classMethod() {
    print("type method - class")
  }

  // 재정의 가능한 class 메서드지만 final 키워드를 사용하면 재정의 할 수 없다.(static = final class)
  final class func finalClassMethod() {
    print("type method - final class")
  }
}

class Student: Person {
  var major: String = ""

  oerride func selfIntroduce() {
    print("저는 \(name)이고, 전공은 \(major)입니다")
  }

  override class func classMethod() {
    print("overriden type method - class")
  }
}

Student 클래스는 Person클래스를 상속받아 온것이기 때문에 아래의 코드는 실행이 안된다.

  1. var name: String > name 변수를 재정의하는 행위
  2. override static func typeMethod() > static을 사용한 타입메서드 재정의
  3. override func sayhello() > final 키워드를 사용한 메서드나 프로퍼티 재정의
  4. oveeride class func finalClassMethod() > final class를 사용한 타입메서드 재정의
let zehye: Person = Person()
let hana: Student = Student()

zehye.name = "zehye"
hana.name = "hana"
hana.major = "Swift"

zehye.selfIntroduce()  // 저는 zehye입니다.
hana.selfIntroduce()  // 저는 hana이고, 전공은 Swift입니다.

Person.classMethod  // type method - class
Person.typeMethod()  // type method - ststic
Person.finalClassMethod()  // type method - final class

Student.classMethod()  // overriden type method - class
Student.typeMethod()  // type method - ststic
Student.finalClassMethod()  // type method - final class