![Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)]](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
상속
클래스는 메서드나 프로퍼티 등을 다른 클래스로부터 상속받을 수 있다.
final
키워드를 사용하면 재정의 (Override
) 방지 가능static
키워드를 사용해 타입 메소드를 만들면 재정의 불가능class
키워드를 사용해 타입 메소드를 만들면 재정의 가능class
앞에final
을 붙이면static
키워드를 사용한 것과 동일override
키워드를 사용하여 부모 클래스 메소드 재정의 가능
자식 / 부모 / 기반 클래스
![Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] - 상속 - 자식 / 부모 / 기반 클래스 Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] - 상속 - 자식 / 부모 / 기반 클래스](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
- A클래스로 부터 상속을 받으면 상속을 받은 B클래스는 A클래스의 자식클래스(
Subclass
/Child-class)
라고 한다. - 자식클래스에게 자신의 특성을 물려준 A클래스를 부모클래스(
Superclass
/Parents-class)
라고 한다. - 다른 클래스로부터 상속을 받지 않은 클래스를 기반클래스(
Base class
)라고 한다. (대부분의 클래스)
// SuperClass 부모 클래스 class Seogun { func name() { print("저의 이름은 서근 입니다") } } // SubClass 자식 클래스 class Mijin: Seogun { override func name() { print("저의 이름은 미진 입니다") } } // Base class 기반 클래스 class Person { var name: String var age: Int var introduction: String { return "이름 : \(name). 나이 : \(age)" } }
상속 관계
![Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] - 상속 - 상속 관계 Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] - 상속 - 상속 관계](https://blog.kakaocdn.net/dn/bQWpy7/btrrn2ldCIF/BQs7XaNh08kNFZkjbnHoMk/img.png)
NSObject > UIResponder > UIView > UIControl > UIButton/UILabel/UISlider...
상속은 Swift의 다른 타입과 클래시를 구별 짓는 클래스 만의 특징이다.
- 클래스는 부모클래스로부터 물려받은 메서드 호출 및 프로퍼티 접근 그리고 서브스크립트 사용 가능
- 부모클래스로부터 물려받은 메서드, 프로퍼티, 서브스크립트 등을 자신만의 내용으로 재정의(
override
) 가능 - 자식클래스에서 재정의 할 때 자식클래스가 부모클래스의 요소를 재정의 한다는 것을 명확히 확인해야 함
- 상속받은 프로퍼티에 값이 변경되었을 때 알려주는 프로퍼티 옵저버 구현 가능
- 연산 프로퍼티를 정의한 클래스에선 연산 프로퍼티에 프로퍼티 옵저버를 사용할 수 없지만, 부모클래스에서 연산 또는 저장 프로퍼티로 정의했으면 자식클래스에서는 프로퍼티 옵저버를 구현할 수 있음
class 클래스명: 부모클래스명 { 프로퍼티와 메서드 }
먼저, 아무것도 상속받지 않은 Person
이라는 기반 클래스를 만들고 name
, Int
저장 프로퍼티와 introduction
이라는 연산 프로퍼티, speak()
라는 메서드를 정의해보자.
// Base class 기반 클래스 class Person { //저장 프로퍼티 var name: String var age: Int //연산 프로퍼티 var introduction: String { return "이름 : \(name). 나이 : \(age)" } //메서드 func speak() { print("안녕하세요. 서근 개발노트 입니다!") } } //인스턴스 let seogun: Person = Person() seogun.name = "서근" seogun.age = 99 print(seogun.introduction) // seogun.speak() //안녕하세요. 서근 개발노트 입니다!
또, 상속을 통해 기반클래스인 Person
클래스보다 더 많은 기능을 수행할 수 있고, 더 세분화되어있는 자식클래스를 만들어 줄 수 있다.
//기반클래스에서 부모클래스로 변경 됨 class Person { //저장 프로퍼티 var name: String = "" var age: Int = 0 //연산 프로퍼티 var introduction: String { return "이름 : \(name). 나이 : \(age)" } //메서드 func speak() { print("안녕하세요. 서근 개발노트 입니다!") } } //자식클래스 class Student: Person { enum grade:String { case A = "통과 입니다." case B = "재시험 입니다." case F = "탈락 입니다." } func study(score: grade) { print("\(score.rawValue)") } } //부모클래스 인스턴스 let seogun: Person = Person() seogun.name = "서근" seogun.age = 99 print(seogun.introduction) //이름 : 서근. 나이 : 99 seogun.speak() //안녕하세요. 서근 개발노트 입니다! //자식클래스 인스턴스 let mijin: Student = Student() mijin.name = "미진" mijin.age = 88 print(mijin.introduction) //이름 : 미진. 나이 : 88 mijin.speak() //안녕하세요. 서근 개발노트 입니다! mijin.study(score: .A) //통과 입니다.
이처럼 Student
클래스가 Person
클래스를 상속받아서 Student
는 자식클래스, Person
은 부모클래스가 되어 자식클래스에서 Person
의 메서드와 저장 프로퍼티를 모두 호출할 수 있게 됐다.
더불어 Student
(자식클래스)를 상속받는 또 다른 클래스를 만들 수 있다. 즉, Student
가 다른 클래스의 부모 클래스가 될 수 있다.
// Person을 상속받은 Student를 상속받은 AnotherSutdent클래스 class AnotherStudent: Student { var subject: String = "" } let cheolsu: AnotherStudent = AnotherStudent() cheolsu.name = "철수" cheolsu.age = 77 print(cheolsu.introduction) //이름 : 철수. 나이 : 77 cheolsu.study(score: .F) // 탈락 입니다.
![Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] - 상속 - 상속 관계 Swift : 기초문법 [상속#1 - 클래스 상속(자식, 부모, 기반 클래스)] - 상속 - 상속 관계](https://blog.kakaocdn.net/dn/cEvNU1/btrrqmCw934/E1brxh379mWyDcUTlZZej1/img.png)
읽어주셔서 감사합니다 🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 기초문법 [상속#3 - 클래스의 이니셜라이저 convenience, required] (0) | 2022.01.24 |
---|---|
Swift : 기초문법 [상속#2 재정의 override] (0) | 2022.01.23 |
Swift : 기초문법 [서브스크립트(subscript)] (0) | 2022.01.21 |
Swift: 기초문법 [모나드 - 컨텍스트, 함수객체, 모나드] (0) | 2022.01.20 |
Swift : 기초문법 [클로저 및 고차함수(map, filter, reduce)] (0) | 2022.01.19 |