☝🏻 상속 받는 클래스 : 자식 클래스 = 서브 클래스
☝🏻 상속 하는 클래스 : 부모 클래스 = 슈퍼 클래스
class 클래스 이름: 부모클래스 이름 {
하위 클래스 정의
}
// 부모 클래스
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
}
}
// 자식 클래스
class Bicycle: Vehicle {
var hasBasket = false
}
var bicycle = Bicycle()
bicycle.currentSpeed // 0
bicycle.currentSpeed = 15.0 // 15
//오버라이딩
class Train: Vehicle {
override func makeNoise() {
print("choo choo")
}
}
let train = Train()
train.makeNoise()
☝🏻 자식 클래스의 오버라이드된 메소드보다 부모 클래스의 메소드를 먼저 호출하고 싶은 경우
override func makeNoise() { super.makeNoise() print("choo choo") }
- 오버라이드 메소드 내부에 super.메소드명()을 통해 먼저 호출 할 수 있다.
// 부모 클래스 class Vehicle { func makeNoise() { print("speaker on") } } // 자식 클래스 class Train: Vehicle { // 오버라이드 override func makeNoise() { // 부모 클래스의 메소드 먼저 호출 super.makeNoise() print("choo choo") } } let train = Train() train.makeNoise() //speaker on //choo choo
// 부모 클래스
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
}
// 오버라이딩
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + "in gear \(gear)"
}
}
☝🏻 프로퍼티 오버라이딩을 막으려면?
final var currentSpeed = 0.0
🌟final
- 프로퍼티 외에 클래스의 상속도 제한할 수 있다!
final class Vehicle { var currentSpeed = 0.0 var description: String { return "traveling at \(currentSpeed) miles per hour" } }
☝🏻 연산자 ( is / as )
- 값의 타입을 확인하거나 변환할 때 사용
// 부모 클래스
class MediaItem {
var name: String
init(name: String) {
self.name = name
}
}
// 자식 클래스
class Movie: MediaItem {
var director: String
init(name: String, director: String) {
self.director = director
super.init(name: name)
}
}
// 자식 클래스
class Song: MediaItem {
var artist: String
init(name: String, artist: String) {
self.artist = artist
super.init(name:name)
}
}
let library = [
Movie(name: "기생충", director: "봉준호"),
Song(name: "Butter", artist: "BTS"),
Movie(name: "올드보이", director: "박찬욱"),
Song(name: "Wonderwall", artist: "Oasis"),
Song(name: "Rain", artist: "이적")
]
var movieCount = 0
var songCount = 0
for item in library {
// is로 인스턴스의 타입 확인
if item is Movie {
movieCount += 1
} else if item is Song {
songCount += 1
}
}
- as? : 조건부 ( 옵셔널 값으로 변환)
- as! : 강제 ( 강제로 변환하기 때문에 항상 성공할 것이라고 확신할 때만 사용해야 한다.)
for item in library {
if let movie = item as? Movie {
print("Movie: \(movie.name), dir. \(movie.director)")
} else if let song = item as? Song {
print("Song: \(song.name), by \(song.artist)")
}
}
패스트캠퍼스 ios 앱개발 swift 강의를 듣고 작성된 글입니다.