객체지향 언어의 대표 특징 중 하나인 상속(Inheritance)은 코드의 재사용과 확장성을 높여준다는 특징을 가지고 있습니다.
Swift는 객체지향 언어의 한 종류이기 때문에 이러한 상속 기능을 가지고 있으며, 유일하게 클래스(class)만이 상속을 사용할 수 있습니다.
프로토콜(protocol)은 상속이 아닌 채택(adopt)이라는 표현을 사용하고 있습니다.
Swift는 다른 언어와 다르게 단일 상속(Single Inheritance)만을 허용하고 있습니다.
상속해 주고 있는 클래스를 부모 클래스(Parent class) 또는 슈퍼/상위 클래스(Super class)라 부르며, 상속을 받고 있는 클래스를 자식 클래스(Child) 또는 서브/하위 클래스(Sub class)라 부르고 있습니다.
상속받은 클래스는 상위 클래스의 저장 속성(Stored Properties)을 수정할 수 없지만, 계산 속성(재정의 설명)의 경우에는 부분적인 재정의(메서드 기능 확장만)가 가능합니다.
상위 클래스의 메서드를 정의할 때는 함수 키워드(func) 앞에 "override" 키워드를 작성해야만 재정의를 할 수 있습니다.
✅ 상속을 선언할 때는 콜론(":") 문자를 사용하며, 콜론을 기준으로 왼쪽이 자식 클래스 그리고 오른쪽이 부모 클래스입니다.
✅ 클래스가 다른 인스턴스들이 상속을 통해 같은 프로퍼티에 접근할 수 있습니다.
class A{ var a: Int = 1 } class B: A{ // B클래스를 기준으로 보면, A클래스는 부모 클래스이자 슈퍼 클래스입니다. var b: Int = 10 } var x = B() x.a // 1 x.b // 10
✅ 클래스가 다른 인스턴스들이 상속을 통해 같은 메서드를 사용할 수 있다.
class A{ var a: Int = 1 func hello(){ print("저는 A입니다.") } } class B: A{ var b: Int = 10 } class C: A{ var c: Int = 100 } var kim = A() var lee = B() var park = C() kim.hello() //저는 A입니다. lee.hello() //저는 A입니다. //A클래스의 메서드를 상속받아 사용 park.hello() //저는 A입니다. //A클래스의 메서드를 상속받아 사용
✅ 상속은 단일 상속만 가능합니다.
class A{ var a: Int = 1 } class B: A{ var b: Int = 10 } class C: A{ var c: Int = 100 } class D: B{ var d: Int = 1000 } class D: C{ //다중 상속 불가능(Invalid redeclaration of 'D') var d: Int = 1000 }
참고자료: 앨런 Swift문법 마스터 스쿨