[Swift] 클래스 계층과 상속

Logan·2020년 10월 24일
1
post-thumbnail

클래스와 구조체를 비교해보면서 클래스에만 있는 특징들을 정리했었습니다.
구조체와 클래스의 차이 링크
오버라이딩 링크

클래스에만 있는 상속과 재정의, 타입캐스팅 등과 같은 특징은 모두 상속과 연관돼있습니다.
상속은 '부모로부터 물려받았다'라고 생각하면, 쉽게 이해할 수 있습니다.

상속

클래스는 다른 클래스를 상속할 수 있습니다.
상속할 클래스는 슈퍼 클래스(Super Class 또는 Parent Class), 상속받은 클래스를 서브 클래스(Subclass 또는 Child Class)라고 합니다.
클래스명 뒤에 : 콜른을 사용하면 상속할 수 있습니다.
다른 클래스를 상속하는 것을 Subclassing이라고도 합니다.

class SubClass: SuperClass

슈퍼 클래스로부터 상속받은 멤버는 서브 클래스에서 직접 선언한것처럼 상속받은 멤버를 자유롭게 사용할 수 있습니다.
상속 관계에 있는 클래스들은 클래스 계층을 구성합니다.
Swift에서는 다중 상속이 불가능하기 때문에 두 개 이상의 Super Class를 상속하는 건 불가능합니다.

class 키워드 앞에 final 키워드를 추가하면, 상속을 금지할 수 있습니다.

final class SubClass: SuperClass

예시

상속받은 멤버를 자유롭게 사용하는 것이 어떤 의미인지 예시를 통해 알 수 있습니다.

class Animal {
    var eating: String = "Can Eat"
    var digest: String = "Can Digest"
    var breathing: String = "Can Breath"
}

class Human: Animal {
    var thinking: String = "Can Think"
    var speaking: String = "Can Speak"
}

let logan = Human()

Animal과 Human 두 개의 클래스를 선언했습니다.
그리고 Human 클래스는 Animal 클래스를 상속하고 있습니다.
Human 클래스로 만들어둔 멤버를 사용하기위해, 인스턴스를 생성했습니다.

logan.thinking // "Can Think"
logan.speaking // "Can Speak"

점문법을 사용하면, Human 클래스에 선언했던 속성(Property)에 접근할 수 있습니다.

위에 코드에서 Human 클래스는 Animal 클래스를 상속했었습니다.

logan.eating // "Can Eat"
logan.digest // "Can Digest"
logan.breathing // "Can Breath"

그래서 이렇게 Animal 클래스의 속성에도 자유롭게 접근할 수 있습니다.

profile
iOS개발자 꿈나무

0개의 댓글