Swift Inheritance01


Swift Inheritance01


* 스스로 공부 및 정리를 위해 The Swift Language Guide을 요약 및 정리 한 내용입니다.

상속 정의 (Inheritance)

  • 클래스는 메소드, 프로퍼티와 다른 특징을 다른클래스로부터 상속 받아 올수 있습니다.
  • 저장된 프로퍼티와 계산된프로퍼티와 상관없이 상복받은 프로퍼티에 프로퍼티 옵저버를 설정해서 반응할수 있습니다.

기반 클래스 정의 (Defingin a Base Class)

  • 다른 어떤 클래스로부터도 상속받지 않은 클래스입니다.
  • 상속을 해주는 클래스입니다.
  • SuperClass라고도 합니다.
class Animals {
    var name = "base"
    var numberofLeg = 0
    var description: String{
        return "\(name) has \(numberofLeg) legs"
    }
    func captureAnimal(){
        
    }
}
let someAnimal = Animals()
print("Animal \(someAnimal.description)")

서브클래스 (Subclassing)

  • 상속 받는 클래스입니다.
  • 부모로 부터 상속받고 자기 자신 고유의 특성도 추가할수 있습니다.
  • 서브클래스의 선언은 class SubClassName: SomeSuperClass 입니다
let someAnimal = Animals()
print("Animal \(someAnimal.description)")

class Dogs: Animals {
    var bark = true
}
let dog = Dogs()
dog.name = "dog"
dog.numberofLeg = 4
print(dog.description)

오버라이딩 (Overriding)

  • 서브클래스는 부모클래스에서 상복받은것을 재정의하는 것을 오버라이딩이라 합니다.
  • 메소드, 타입메소드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 모두 가능합니다
  • 오버라이드는 다른 선언앞에 override 키워드를 붙여줘야합니다.

Super

  • super키워드와 점문법 혹은 인덱스 구문으로 부모 클래스의 메소드, 프로퍼티, 서브스크립트에 접근할수 있습니다.

메소드 오버라이드 (Overriding Method)

  • 상속받은 메소드를 오버라이드 하기위해 메소드 선언 앞에 override 키워드를 붙여주면됩니다.
class Cats: Animals {
    override func captureAnimal() {
        print("YES")
    }
}
let cat = Cats()
cat.captureAnimal()

프로퍼티 오버라이드 (Overriding Property)

  • 저장된 프로퍼티, 계산된프로퍼티 모두 오버라이드 가능합니다.
  • 오버라이드시에는 프로퍼티의 이름과 타입을 명시해야합니다.
  • 상복받은 읽기전용 프로퍼티도 getter/setter를 정의해서 읽기/쓰기가 가능한 프로퍼티로 변경해서 사용 가능합니다.
  • 반대로 읽고//쓰기가 가능한 프로퍼티를 읽기전용으로 선언하는것은 할수 없습니다.
class Cats: Animals {
    var AnimalType = 1
    override var description: String {
        return "Animaltyep : \(AnimalType)" + super.description
    }
    override func captureAnimal() {
        print("YES")
    }
}
let cat = Cats()
cat.captureAnimal()
print(cat.description)

프로퍼티 옵저버 오버라이드 (Overriding Property Observer)

  • 이미 부모클래스에 선언된 프로퍼티 옵저버도 서브클래스에서 재정의해 사용할수 있습니다.
  • 단, 상수 프로퍼티와 읽기전용 프로퍼티에는 옵저버를 붙일 수 없습니다.(값의 변동이 없음)

오버라이드 방지 (Preventing Override)

  • 오버라이드 되는 것을 방지할려고 final 키워드를 사용합니다.
  • final 키워드로 선언되면 override 되는것을 막을수 있습니다.
  • 클래스 전체를 final 선언 할수도 있습니다.