클래스와 구조체를 비교해보면서 클래스에만 있는 특징들을 정리했었습니다.
구조체와 클래스의 차이 링크
오버라이딩 링크
클래스에만 있는 상속과 재정의, 타입캐스팅 등과 같은 특징은 모두 상속과 연관돼있습니다.
상속은 '부모로부터 물려받았다'라고 생각하면, 쉽게 이해할 수 있습니다.
상속
클래스는 다른 클래스를 상속할 수 있습니다.
상속할 클래스는 슈퍼 클래스(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 클래스의 속성에도 자유롭게 접근할 수 있습니다.