Swift) 상속

Havi·2021년 1월 3일
0

Swift기초

목록 보기
11/19

상속이란 한 클래스가 다른 클래스에서 정의된 프로퍼티나 메소드를 물려받아 사용하는 것

프로퍼티와 메소드를 물려준 클래스 = 부모 클래스 = 상위 클래스 = 슈퍼 클래스 = 기본 클래스
프로퍼티와 메소드를 물려받은 클래스 = 자식 클래스 = 하위 클래스 = 서브 클래스 = 파생 클래스

서브클래싱

// 기본 클래스

class A {
    var name = "Class A"

    var description: String {
        return "This class name : \(self.name)"
    }

    func foo() {
        print("\(self.name)'s method is called")
    }
}

let a = A()

a.name // "Class A"
a.description // "This class name : Class A"
a.foo() // "Class A's method is called"


// 서브 클래싱
class B: A {
    var prop = "Class B"

    func boo() -> String {
        return "Class B prop = \(self.prop)"
    }
}

let b = B()

b.prop // "Class B"
b.boo() // "Class B prop = Class B"

//b 는 A 클래스를 상속받음으로써 A의 프로퍼티와 메소드를 상속받음
b.name // "Class A"
b.foo() // "Class A's method is called"

오버라이딩

자식 클래스에서 재정의된 메소드나 프로퍼티는 부모 클래스로부터 물려받은 내용을 덮어쓰게 되는데, 이 과정을 오버라이딩이라고 한다.

오버라이드 하기 위해서는 오버라이딩 하려는 메소드나 프로퍼티 앞에 override 키워드를 붙여야한다.

다음은 프로퍼티 오버라이딩 시 허용되지 않는 것들이다.

  1. stored property를 stored property로 오버라이딩 하는 것.
  2. get, set 구문과 관계 없이 computed property를 stored property로 오버라이딩 하는 것.
  3. stored property를 get 구문만 제공되는 computed property로 오버라이딩 하는 것.
  4. get set 모두 제공되는 연산 프로퍼티를 get구문만 제공되게 오버라이딩 하는 것.

즉 computed -> computed 오버라이딩이 가능하고, 더 많은 기능을 확장 또는 변경하는 방향으로 오버라이딩이 가능하지만 기능을 제한할 수는 없다.

class C: B {
    override var prop: String {
        get {
            "Override시 stored -> computed 가능 ~!~!"
        }

        set {
            "Set 가능 저장 -> 연산"
        }
    }

    override func boo() -> String {
        return "This function is overriding B's Boo()"
    }

    func boo(input: String) -> String {
        let overloading: String = "\(input)이 있어서 얘는 다른 method로 취급됨 ^^"
        return overloading
    }
}

let c = C()

c.boo() // "This function is overriding B's Boo()"
profile
iOS Developer

0개의 댓글