클래스를 정의할 때는 class라는 키워드를 사용한다.
구조체와 마찬가지로 클래스를 정의한다는 것은 새로운 타입을 정의해주는 것과 마찬가지 이므로, Int, String과 같이 대문자 카멜 케이스를 사용하여 이름을 지어준다.
클래스를 정의하는 방법은 구조체와 매우 흡사하지만, 구조체와는 다르게 다른 클래스를 상속 받을 수 있으므로 콜론(:)을 써주고 부모 클래스의 이름을 명시할 수 있다.
class [클래스 이름]: [부모 클래스의 이름], [부모 클래스의 이름], ... {
[프로퍼티와 메서드들]
}
사람의 키(height)와 몸무게(weight)정보를 갖는 사람(Person) 클래스를 만들어보자.
Float 타입인 height와 weight 저장 프로퍼티가 있는 Person클래스이다.
class Person {
var height: Float = 0.0
var weight: Float = 0.0
}
클래스를 정의한 후, 인스턴스를 생성하고 초기화하고자 할 때는 기본적인 이니셜 라이저를 사용한다. 하지만 Person클래스처럼 프로퍼티의 기본값이 저장되어 있다면 전달 인자를 통하여 따로 초깃값을 전달해주지 않아도 된다.
인스턴스를 초기화 한 후 프로퍼티 값에 접근하고 싶다면 마침표(.)를 사용한다.
var jaehoon: Person = Person()
jaehoon.height = 165.0
jaehoon.weight = 55.0
클래스의 인스턴스는 참조 타입 이므로 더는 참조할 필요가 없을 때 메모리에서 해제되고, 이것을 소멸이라고 한다. 소멸 직전에는 deinit이라는 메서드가 호출되는데, 이 메서드는 디이니셜 라이저(DeInitializer)라고 부른다.
이 메서드는 클래스당 하나씩만 구현할 수 있으며, 매개변수와 반환 값을 가질 수 없다. 매개변수를 위한 소괄호도 적어주지 않는다. Person클래스에 deinit메서드를 구현해보자.
class Person {
var height: Float = 0.0
var weight: Float = 0.0
deinit {
print("Person 클래스의 인스턴스가 소멸됩니다.")
}
}
var jaehoon: Person? = Person()
jaehoon = nil
//Person 클래스의 인스턴스가 소멸됩니다.
보통 deinit 메서드에는 인스턴스가 해제되기 전에 처리해야할 코드를 넣어준다. 인스턴스 소멸 전 데이터를 저장하거나, 다른 객체에 인스턴스의 소멸을 알려야 할 때 사용한다.
'Swift' 카테고리의 다른 글
swift: 저장 프로퍼티 (0) | 2022.01.21 |
---|---|
swift: 구조체와 클래스의 차이 (0) | 2022.01.21 |
swift: 구조체 (0) | 2022.01.21 |
swift: 옵셔널(Optional) (0) | 2022.01.21 |
swift: 함수 데이터타입 (0) | 2021.12.27 |