Swift Classes & Inheritance
우선 Swift에서 Class를 정의하는 방법을 적으며 글을 시작하겠다.
class MyClass { }
이제 예제를 통해 알아보도록 하겠다.
class Enemy {
var health = 100
var attackStrength = 10
func move() {
print("Walk forwards.")
}
func attack() {
print("Land a hit, does \(attackStrength) damage.")
}
}
health와 attackStrength는 Enemy class의 property이다.
그리고 move, attack는 method이다.
이제 이렇게 class를 정의 하였으니, initialize를 해서 사용을 해보겠다.
let skeleton = Enemy()
print(skeleton.health) // 100 출력됨.
skeleton.move() // Walk forwards 출력됨.
skeleton.attac() // Land a hit, does 10 damage. 출력됨.
let skeleton2 = Enemy()
let skeleton3 = Enemy()
이제 Inheritance에 대해서 알아보자.
상속 이라는 뜻으로 아래와 같이 쓴다.
class MyClass: SuperClass { }
SuperClass는 parent가 되고 , SubClass는 child가 된다.
SubClass는 SuperClass로 부터 Method와 Properties를 상속 받는다.
예제를 통해 알아보자.
class Dragon: Enemy {
}
let dragon = Dragon()
dragon.move() // Walk forwards 출력됨.
Dragon은 Enemy로 부터 상속을 받아 생성된 Class이다.
그래서 Dragon이 비어있어도 dragon.move()를 하여도 method가 실행되는 것이다.
class Dragon: Enemy {
var wingSpan = 2
func talk(speech: String) {
print("Says: \(speech)")
}
override func move() {
print("Fly forward")
}
override func attack() {
super.attack()
print("Spits fire, does 10 damage")
}
let dragon = Dragon()
dragon.wingSpan = 5 // 새로운 속성을 추가할 수 있고
dragon.attackStrength = 15 // 부모에게 상속받은 속성에 대한 값도 변경이 가능하다.
dragon.talk(speech: "Hello!") // Says: Hello! 출력됨
dragon.move() // Fly forward 출력
dragon.attack() // Land a hit, does 15 dagmae. Spits fire, does 10 damage.
정리하자면 Enemy의 child인 Dragon class는 Enemy가 할 수 있는 모든것을 하고, 거기에 자신만의 것도 더 할수 있다.
그리고 override를 통해 parent의 method에 접근하여 수정할 수 있게 된다.
attack() method를 보면 super이라는 키워드를 사용하였는데, 이는 그대로 부모에게 상속 받은 것을 유지하면서 밑에 더 custom을 해줄수 있다.
Swift에서는 전체적으로 NSObject > UIResponder > UIView > UIControl > UIButton 순으로 위의 Super Class - Sub Class의 개념을 가진다.
댓글남기기