클래스
구조체
는 값 타입인 반면에, 클래스
는 참조 타입이다.
swift
에서 클래스
는 다중상속
을 지원하지 않는다.
- 전체적으로
구조체
와 매우 동일하지만, 2가지 종류의 타입메소드
가 존재한다.
static 타입메소드
는 하위 클래스에서 재정의가 불가능한 메소드이다.
class 타입메소드
는 하위 클래스에서 재정의가 가능한 메소드이다.
구조체
와의 차이점은 let
으로 인스턴스를 생성하였을때, 클래스
는 가변 프로퍼티
의 값의 변경이 가능하다는 점이다.
class Sample{
var mutableProperty : Int = 100
let immutableProperty : Int = 200
static var typeProperty :Int = 100
static let immutbaleTypeProperty : Int = 100
func instanceMethod(){
print("instanceMethod()")
}
static func typeMethod(){
print("typeMethod - static")
}
class func classMethod(){
print("classMethod - class")
}
}
var sampleInstance: Sample = Sample(mutableProperty: 3, imuutableProperty: 2 ....)
클래스 인스턴스 소멸
- 클래스 인스턴스 소멸 메소드는
deinit
이며, 이를 정의할때는 타입명, 매개변수가 필요없다.
- 인스턴스가 소멸될때 자동으로 호출된다.
class Person{
var name: String
var age: age
deinit{
print("소멸")
}
}
var person: Person? = Person(name: "이준혁", age: 25)
person = nil
식별연산자
- 구조체와 다르게 클래스는 값이 아닌
참조
타입이다.
- 동일한 인스턴스를 참조하는지 식별연산자
===
를 통해 알 수 있다.
class Person{
let name: String
let age: Int
}
var person1 = Person(name: "이준혁", age: 25)
var person2 = person1
var person3 = Person(name: "이준혁", age: 25)
let person1&person2 = person1 === person2
let person1&person3 = person1 === person3
let person2&person3 = person2 === person3