클래스란?
클래스는 정의하여 객체를 만들고 생성하여 사용할 수 있습니다.
예를 들면
import Foundation
class Enemy{
var health:Int = 100
var attackDamage:Int = 10
func move(){
print("Enemy move Forward")
}
func attack(){
print("Enemy attack \(attackDamage)")
}
}
이런식으로 객체로 쓸 수 있게 만들었습니다.
그러면 이 클래스를 개체로 쓰기 위해 하나의 파일을 만들어 보겠습니다.
import Foundation
var enemy:Enemy = Enemy()
//클래스에 있는 함수를 사용한다.
enemy.move()
enemy.attack()
//클래스에 있는 멤버변수의 값을 바꾼다.
enemy.attackDamage = 110
//클래스에 있는 함수를 사용하여 값이 바뀐다.
enemy.attack()
이것에 대한 print값은
Enemy move Forward
Enemy attack 10
Enemy attack 110
Program ended with exit code: 0
이런 방식으로 만듭니다. struct와 다르게 클래스의 멤버변수를 조작할 수 있습니다.
상속이란
부모가 가진것을 상속을 받아서 사용할 수 있습니다.
예를 들면 위에 Enemy 클래스를 상속받을 class를 만들어서 사용해 보겠습니다.
import Foundation
class Dragon:Enemy{
}
Dragon 클래스를 만들어서 Enemy 클래스를 상속받았습니다.
그 다음 사용해 보겠습니다.
var dragon:Dragon = Dragon()
dragon.move()
dragon.attack()
위에 Dragon 클래스에는 아무것도 작성을 안하였지만 Enemy 클래스를 상속받아서 Enemy안에 있는 함수를 사용할 수 있습니다.
값 또한
Enemy move Forward
Enemy attack 10
이렇게 나옵니다.
그러면 자식클래스인 dragon에서 멤버변수와 클래스를 다뤄볼까요?
import Foundation
class Dragon:Enemy{
var wingSpan:Int = 15
func vocal(speech:String){
print("I'm \(speech)")
}
}
이런 방식으로 class를 만들어서 Dragon 만의 함수를 작성하였습니다.
var dragon:Dragon = Dragon()
dragon.move()
dragon.attack()
dragon.vocal(speech: "vocal")
print(dragon.wingSpan)
위에 같이 작성하면
Enemy move Forward
Enemy attack 10
I'm vocal
15
이렇게 출력이 가능합니다.
또한 dragon 클래스에서 Enemy 클래스의 함수들을 상속받아 사용해 보겠습니다.
import Foundation
class Dragon:Enemy{
var wingSpan:Int = 15
func vocal(speech:String){
print("I'm \(speech)")
}
//enemy의 move를 상속받았다
override func move() {
print("dragon move")
}
override func attack() {
super.attack()//enemy의 attack함수를 사용하겠다하여 super를 사용한다.
print("dragon attack")
}
}
위와 같이 override를 사용하는 것은 상속을 받아서 사용하겠다는 뜻입니다.
그리고 super를 쓰면 Enemy의 함수를 사용하겠다는 뜻 입니다.
var dragon:Dragon = Dragon()
dragon.move()
dragon.attack()
dragon.vocal(speech: "vocal")
print(dragon.wingSpan)
dragon.move()
dragon.attack()
그래서 이것에 대한 프린트 값은
I'm vocal
15
dragon move
Enemy attack 10
dragon attack
Program ended with exit code: 0
아까 super로 받은 값만 추가가 되고 다른 것은 바뀌게 출력이 되었습니다.
이렇듯이 클래스와 상속을 알아보았습니다. 처음에 앱을 만들때 viewDidLoad()에서 super라는 것을 보셨듯이 ViewController에서 상속받아 사용하는 것을 알 수 있습니다.
'Language > Swift' 카테고리의 다른 글
Closure (클로저) (0) | 2022.03.24 |
---|---|
클래스 vs 구조체 차이 (0) | 2022.02.19 |
Swift 기본 문법 - 자료형 (0) | 2022.02.08 |