우선 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의 개념을 가진다.

태그:

카테고리:

업데이트:

댓글남기기