1. 클래스란?
- 참조 타입
- 대문자 카멜케이스 사용
- 다중 상속이 되지 않음
2. 문법
class 이름 {
}
class Sample{
var mutableProperty: Int = 100
let immutableProperty: Int = 200
static var typeProperty: Int = 300
func instanceMethod() {
print("instance method")
}
static func typeMethod() {
print("type mehhod - static")
}
class func classMethod() {
print("type method - class")
}
}
var mutableReference: Sample = Sample()
mutableReference.mutableProperty = 200
let immutableReference: Sample = Sample()
immutableReference.mutableProperty = 210
Sample.typeProperty = 300
Sample.typeMethod()
3. 초기화
- 클래스는 인스턴스 생성시 반드시 초기화 필요
- init 초기화를 제공해야 함
- 모든 프로퍼티에 default값을 제공하면 init 생략가능
- 모든 프로퍼티가 optional이면 init 생략가능
- 클래스는 convenience initializer를 제공
<여러가지 init 방법>
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(name: "sonny", age: 31)
class Person {
var name: String = "이름없음"
var age: Int = 0
}
let person = Person()
class Person {
var name: String
var age: Int
init() {
self.name = "이름없음"
self.age = 15
}
}
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
init(name: String) {
self.name = name
self.age = 0
}
init() {
self.name = "이름없음"
self.age = 15
}
}
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
ler person = Person(name: "이름만 주어짐")
print(person.age)
4. 소멸자
- 클래스에서만 사용 가능
- 사용 종료된 인스턴스가 메모리에서 해제될 때 자동호출(직접호출 불가)
deinit {
}