class MyClass { }
Enemy.swift
:
class Enemy {
var health = 100
var attackStrength = 10
// properties
func move(){
print("Walk forwards.")
}
func attack() {
print("Land a hit, does \(attackStrength) damage.")
}
// methods
}
MyClass()
main.swift
:
let skeleton = Enemy()
print(skeleton.health)
skeleton.move()
skeleton.attack()
let skeleton2 = Enemy()
let skeleton3 = Enemy()
.
를 이용해서 접근할 수 있다. let
으로 선언해도 내부 property 값을 변경할 수 있다class Myclass: SuperClass {}
SuperClass
와 SubClass
SubClass는 SuperClass의 모든 property들과 method들을 상속받는다.
override
subclass에서 override 키워드를 사용하여 method를 생성하면 이는 superclass의 함수를 재정의한다는 것.
Dragon.swift
:
class Dragon: Enemy {
var wingSpan = 2
func talk(speech: String){
print("Says: \(speech)")
}
override func move(){
// Super Class의 move()함수와는 다른 함수를 재정의하겠다!
print("Fly forwards")
}
override func attack(){
super.attack() // super class의 attack () Method
print("Spits fire, does 10 damage") // 재정의된 attack() method
}
}
클래스의 경우
let skeleton1 = Enemy(health: 100, attackStrength: 100) let skeleton2 = skeleton1 skeleton1.takeDamage(amount: 10) skeleton1.takeDamage(amount: 10) skeleton2.takeDamage(amount: 10)
skeleton2에 skeleton1을 넣고 실행하면
skeleton1.health
와skeleton2.health
가 모두 70이 된다.
(참조에 의한 복사이므로 skeleton1과 skeleton2는 한몸인 것!)구조체의 경우
var skeleton1 = Enemy(health: 100, attackStrength: 100) var skeleton2 = skeleton1 skeleton1.takeDamage(amount: 10) skeleton1.takeDamage(amount: 10) skeleton2.takeDamage(amount: 10)
skeleton1.health
는 80,skeleton2.health
는 90의 값을 갖는다.
(값에 의한 복사이므로 skeleton1과 skeleton2는 별개로 존재한다!)
===
, !==
: 클래스의 인스턴스끼리 참조가 같은지 확인할 때 식별연산자를 사용한다.