이 포스팅은 위 영상을 보고 작성한 포스팅이다. (01:27:16~01:38:36)
저번에 배운 클래스를 더 배워보도록 하자. 이번에는 inheritance, 우리말로는 상속이라는 것을 배워보자.
일단 Car라는 클래스를 만들어보자.
class Car{
var topSpeed = 200
func drive() {
print("Driving at \(topSpeed)")
}
}
참고로 문자열 안에 변수나 상수의 값을 넣으려면 \()와 같은 형태로, 괄호 안에 넣으면 된다
위 클래스를 통해서 객체도 생성해보자.
let myRide = Car()
myRide.topSpeed // 200
myRide.drive() // "Driving at 200" 출력
Futurecar라는 클래스를 만들어보자. 이 Futurecar는 위에서 만들었던 Car클래스에 나는 기능이 추가되었다고 생각하면 된다. 클래스를 통해 객체까지 만들어보자.
class Futurecar{
var topSpeed = 250
func drive(){
print("Driving at \(topSpeed)")
}
func fly(){
print("Flying")
}
}
let myNewRide = Futurecar()
Car 클래스랑 비교해보았을 때 유사한 점이 보일 것이다. 코드의 중복이 보인다면 이제 상속이라는 개념을 알아야 할 때이다.
Futurecar는 Car의 기본 기능을 상속받아서 기존 Car의 기능을 유지하고 새로운 기능을 추가할 수 있다.
여기서 Car는 Futurecar의 SuperClass라고 불린다. Futurecar는 Subclass라고 불린다.
이제 상속이라는 것을 이용해서 Futurecar라는 클래스를 만들어보겠다.
일단 아래 코드를 보도록 하자.
class Futurecar : Car{
func fly(){
print("Flying")
}
}
let myNewRide = Futurecar()
myNewRide.drive() // Car의 함수
myNewRide.topSpeed // Car의 propety
Futurecar에 ": Car"를 적음으로 써 Futurecar는 Car를 상속받게 된다.
Car를 상속함으로써 Futurecar는 Car의 기능을 사용할 수 있다. 그리고 fly 기능까지 사용할 수 있다.
그런데 여기 문제가 하나 있는데 Futurecar는 속도가 Car보다 빨라야 된다는 것이다. 즉, topSpeed가 200이 아닌 250이 되어야 한다.
위에 상속받은 채로 Futurecar를 사용하면 topSpeed가 200밖에 될 수 없다. 여기서 overriding이라는 것을 사용해야 한다. 바로 예시를 보도록 하자.
class Futurecar : Car{
override func drive(){
print("Driving at \(topSpeed + 50)") // override
}
func fly(){
print("Flying")
}
}
let myNewRide = Futurecar()
myNewRide.drive() // override한 drive함수가 동작, 250 출력
drive라는 함수를 Futurecar Class에서 다시 정의하고 있는데 func 왼쪽에 보면 override라고 적힌 것을 볼 수 있다.
즉, SuperClass에 있는 drive함수를 다시 정의하는 것을 override라고 하고 func 왼쪽에 표시해주면 된다.
override한 함수에서 SuperClass의 함수를 호출하는 것도 가능하다. super.함수() 형태로 작성하면 된다. 다음 예시를 보도록 하자.
class Futurecar : Car{
override func drive(){
super.drive() // super class의 drive() 실행
print("and rockets boosting at \(topSpeed + 50)")
}
func fly(){
print("Flying")
}
}
상속을 활용하여 중복되는 코드를 많이 줄일 수 있고, 코드 정리도 쉽게 할 수 있다.
'스위프트' 카테고리의 다른 글
스위프트 튜토리얼(12) - Initializer (0) | 2020.12.30 |
---|---|
스위프트 튜토리얼(11) - UIKit (0) | 2020.12.29 |
스위프트 튜토리얼(9) - Class, 클래스(1) (0) | 2020.12.25 |
스위프트 튜토리얼(8) - Fuctions, 함수(2) (0) | 2020.12.24 |
스위프트 튜토리얼(7) - Fuctions, 함수(1) (0) | 2020.12.23 |