Swift의 클래스와 구조체에 대해 정리해보고자 한다.
1. 클래스
클래스 정의
// 클래스 정의
class Monster {
var clothes = "Orange"
var speed = 5
var power = 20
var expoint: Double = 500
func attack() {
print("공격!")
}
}
클래스 내부에 선언된 변수를 프로퍼티, 함수를 메서드라고 부른다.
위 코드에서 clothes, speed 등이 프로퍼티, attack()이 메서드!
인스턴스
var easyMonster = Monster() // Monster 클래스의 인스턴스 정의
easyMonster.clothes // "Orange"
easyMonster.speed // 5
클래스 사용을 위해 만들어지는 객체를 인스턴스라고 부른다.
위 코드에서 easyMonster가 Monster 클래스의 인스턴스이다.
클래스 내부의 프로퍼티는 dot syntax로 접근할 수 있다!
상속
class BossMonster: Monster {
var level = 100
func attackBossSkill() {
print("보스 공격")
}
}
let boss = BossMonster() // BossMonster의 인스턴스 boss
boss.level // 100
boss.clothes // "Orange" // Monster 클래스의 프로퍼티와 메서드 사용 가능
boss.speed // 5
boss.attack()
클래스는 다른 클래스로부터 프로퍼티나 메서드를 상속받아 사용할 수 있다.
위 코드에서 BossMonster 클래스는 Monster 클래스를 상속받은 클래스로,
Monster 클래스 내부의 프로퍼티나 메서드를 사용할 수 있다.
이때 상속받은 클래스를 자식클래스(SubClass), 물려준 클래스를 부모클래스(SuperClass)라고 부른다.
재정의
class BossMonster: Monster {
var levelLimit = 500
func bossAttack() {
print("스페셜 공격")
}
**override** func attack() { // 부모클래스로부터 가져와서 재정의하기 override
**super.attack()** // 부모클래스의 기능 사용
print("오버라이드 공격!")
}
}
부모클래스로부터 물려받은 프로퍼티나 메서드를 자식클래스만의 기능으로 변경하여 사용하고 싶을 때, **재정의(override)**한다.
부모클래스의 기능도 함께 사용하고 싶다면 super 키워드를 붙여 사용한다.
2. 클래스와 구조체의 비교
구조체는 값 타입, 클래스는 참조 타입이다.
값 타입(value type)이라는 뜻은, 상수나 변수에 값이 전달될 때 그 값이 복사되어 전달된다는 의미이다.
반면 참조 타입(reference type)이라는건 값을 할당하거나 전달할 때 복사되지 않고 참조된다는 뜻을 가진다.
구조체와 클래스는 프로퍼티나 메소드를 정의할 수 있고 초기화를 할 수 있다는 점 등에서 공통적인 특징을 가진다.
'공부하자! > iOS' 카테고리의 다른 글
[iOS] TableView 테이블뷰에 대하여 (0) | 2022.08.11 |
---|---|
[Swift] 자주 실수하는 오류 정리 (0) | 2022.08.11 |
[iOS] 화면 전환에 대하여 (0) | 2022.07.20 |
[Xcode] 스토리보드 추가, 지정, 접근하기 (0) | 2022.07.14 |
Xcode 13에서 swift package 찾기 (0) | 2022.06.24 |