상속의 규칙
- 자식은 한개의 super class만 상속받을 수 있다.
- 부모는 여러 자식들을 가질 수 있다.
- 상속의 깊이는 상관이 없다.
1. 자식은 한개의 super class 즉 한개의 부모 클래스만 가질 수 있다.
2. 부모 클래스는 여러 자식 클래스를 가질 수 있다.
3. 상속의 깊이는 상관이 없다. 깊이는 얼마든지 깊어져도 괜찮다는 것이다.
Student is Person이므로 Student 는 Person class를 상속받을 수 있다. 이를 Swift 코드로 구현해보면 다음과 같다.
struct Grade {
var letter: Character
var points: Double
var credits: Double
}
class Person {
var firstName: String
var lastName: String
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
func printMyName() {
print("My name is \(firstName) \(lastName)")
}
}
class Student: Person {
var grades: [Grade] = []
}
Student class는 Person 클래스를 상속받으므로, Person class의 firstName, lastName, printMyName() 에 접근할 수 있다.
하지만 Person Class는 Student Class의 grades 속성에는 접근할 수 없다.
이를 좀 더 확장시켜보자. 아까 상속은 얼마든지 깊어질 수 있다고 했다.
// 학생인데 운동선수
class StudentAthlete: Student {
var minimumTrainingTime: Int = 2
var trainedTime: Int = 0
func train() {
trainedTime += 1
}
}
// 학생이자 운동선인데 축구선수
class FootballPlayer: StudentAthlete {
var footballTeam = "FC Swift"
override func train() {
trainedTime += 2
}
}
위의 코드를 보면 정말 상속은 깊이가 없다는 걸 알 수 있다. Person > Student > StudentAthlete > FootballPlayer로 상속이 깊어지고 있다.
그럼 이를 활용하여 객체를 생성해보자
var athelete1 = StudentAthlete(firstName: "Yuna", lastName: "Kim")
var athelete2 = FootballPlayer(firstName: "Heung", lastName: "Son")
athelete1은 StudentAthlete의 인스턴스이고, athelete2는 FootballPlayer의 인스턴스이다. FootballPlayer는 StudentAthelete의 SubClass이다.
이렇게 부모-자식 관계의 클래스는 서로의 클래스 타입으로 캐스팅 해줄 수 있다.
캐스팅 방법엔 2가지가 있다.
- Upper Casting
- Down Casting
Upper casting은 SubClass를 SuperClass의 타입으로 캐스팅하는 것이다.
즉 서브 클래스의 인스턴스를 슈퍼 클래스의 타입으로 참조하는 것을 의미한다.
athelete1 = athelete2 as StudentAthlete
athelete1.train()
athelete1.trainedTime
Down casting은 슈퍼 클래스의 인스턴스를 서브 클래스의 타입으로 참조하는 것이다.
if let son = athelete1 as? FootballPlayer {
print("--> team:\(son.footballTeam)")
}
여기서 못보던 문자가 나온다. as? 는 뭔데 물음표가 붙는 걸까?
Swift는 안전한 언어이다. 슈퍼 클래스에서 서브 클래스로 캐스팅하는 것은 실패할 수 있기 때문에, optional 이 사용되는 것이다!
as? : "런타임 시점"에 타입 캐스팅(다운 캐스팅)을 하며, 실패할 경우 nil을 리턴
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'iOS > iOS 앱 개발 올인원 패키지 Online' 카테고리의 다른 글
[iOS] 패스트캠퍼스 챌린지 25일차 - Class.생성자(1) (0) | 2021.09.30 |
---|---|
[iOS] 패스트캠퍼스 챌린지 24일차 - Class.상속(3) (0) | 2021.09.29 |
[iOS] 패스트캠퍼스 챌린지 22일차 - Class.상속(1) (0) | 2021.09.27 |
[iOS] 패스트캠퍼스 챌린지 21일차 - Class(1) (0) | 2021.09.26 |
[iOS] 패스트캠퍼스 챌린지 20일차 - Structure(5). Extension (0) | 2021.09.25 |