-
Class의 상속오늘의 Swift 상식 2021. 8. 15. 21:07728x90반응형
안녕하세요. iOS 개발자 에이든입니다!👦🏻
오늘은 Class의 상속에 대해서 알아볼게요!
상속이라는 개념은 다른 언어들에서도 많이 있는 개념인데요
과연 Swift에서는 어떨지 같이 알아보도록 합시다!
시작!!!
자 먼저 상속의 개념에 대해 설명드릴게요. 상속이란
한 Class가 가지고 있는 Property와 Method를 다른 Class에게 그대로 승계해주는 것을 말합니다.
Swift에서의 상속은 어떤지 볼까요?
1. Class에만 있고, Struct에는 없습니다.
2. 자식 Class가 부모 Class로부터 기능을 물려받는 것
3. 승계해주는 Class는 보통 부모/슈퍼/상위 Class라고 부릅니다.
4. 승계받는 Class는 보통 자식/서브/하위 Class라고 부릅니다.
5. 상속받은 Class도 새로운 자식 Class에게 상속이 가능합니다.
6. 단일 상속만 가능합니다. (한 부모한테만 상속받을 수 있습니다.)
7. 부모 Class의 Instance를 참조할 때는 super라는 키워드를 사용합니다. (super.property)
8. 부모 Class의 Instance가 private이면 해당 Instance는 상속 자체가 안 되고, 접근도 제한됩니다.
* 문법 구조
class SubClass: SuperClass { }
자 예를 들어 부모님이 건물주예요!
건물을 상속받았다고 합시다. (상상만으로 행복하네요 🥰)
그 전에는 건물을 카페 건물로 썼는데, 저는 학원으로 용도를 바꿀 수도 있겠죠?
Class에서도 마찬가지로 상속받았지만 용도를 바꿀 수 있습니다.
Overriding (재정의)
1.Overriding Methods
- Overriding 대상이 되는 Method의 매개변수 개수나 Type, 그리고 Return Type은 변경할 수 없습니다.
- Method Overriding을 통해 변경할 수 있는 것은 오로지 내부 구문들 뿐이에요.
override func method(/* 변경 불가 */) -> String/* 변경 불가 */ { return 값 }
2. Overriding Properties
- Property의 접근자, 설정자, 감시자(Oberver)를 재정의
- 저장 Property를 Overriding 할 때는 연산 Property가 됩니다.
- Property의 Overriding은 상위 Class의 기능을 하위 Class가 확장, 또는 변경하는 형태로만 진행되어야 합니다!
class 탈것 { var 경적소리 = "빵" } class 자동차: 탈것 { var 경적횟수: Int = 2 override var 경적소리: String { get { var 자동차경적소리 = "" for _ in 0..<경적횟수 { 자동차경적소리 += super.경적소리 } return 자동차경적소리 } set { super.경적소리 = newValue } } } let vehicle = 탈것() let car = 자동차() print(car.경적소리) // 빵빵 // 참조 Type이므로 외부에서 Super Class의 Property를 달라고해도 car 내부에서 구현된 상태로 나옵니다. print((car as 탈것).경적소리) // 빵빵 print(vehicle.경적소리) // 빵
3. Overriding Property Observers
- Property Overriding을 사용하여 상속된 Property에 Property Observer를 추가할 수 있습니다.
- 상속된 Property의 값이 변경될 때, 해당 Property가 처음 구현된 것과 상관없이 알림을 받을 수 있습니다.
- 상속된 상수 저장 Property 또는 읽기 전용 연산 Property에는 Property Observer를 추가할 수 없습니다.
- 동일한 Property에 대해 Override setter와 Overriding Property Observers를 둘 다 제공할 수는 없습니다.
class 특이한자동차: 자동차 { override var 경적횟수: Int { didSet { 경적소리 = "뿡" } } } let specialCar = 특이한자동차() // 경적횟수를 지정해주면, 알아서 경적소리를 뿡으로 변경 specialCar.경적횟수 = 3 print(specialCar.경적소리) // 뿡뿡뿡
4. Overriding을 막는 법:부모 Class에서 해당 Property나 Method를 정의할 때 final이라는 키워드를 앞에 붙여줍니다.
오늘은 상속에 대해 알아보았습니다.
확실히 다른 언어랑 다른 부분들이 있죠?
잘 활용하면 좀 더 간략하게 코드를 짤 수 있으니
잘 알고 잘 써먹는 게 중요할 것 같아요!
혹시라도 부족하거나 잘못된 부분 그리고 질문 있으시면 언제든 댓글 부탁드려요! 감사합니다!👦🏻👋🏻
728x90반응형'오늘의 Swift 상식' 카테고리의 다른 글
Protocol 2편 (Delegation, Extension, 상속, 합성) (0) 2021.08.25 Protocol 1편 (Protocol 정의 방법) (0) 2021.08.16 Initializer 2편 (Class의 Initializer) (0) 2021.08.08 Initializer 1편 (Struct의 Initializer) (0) 2021.08.08 Struct, Class (2) 2021.07.18