Class
- 참조 타입 (reference type / call by reference)
- 단일 상속만 가능하다.
- iOS Framework 의 대부분을 구성하고 있다.
- extension 이 가능하다.
- 힙 영역에 저장된다.
- 서로 다른 타입들을 하나로 묶을 수 있고, 묶인 자료형들을 새로운 타입처럼 사용할 수 있다.
- 내부에서 프로퍼티와 메소드를 정의할 수 있다.
- 프로토콜을 사용할 수 있다.
- 클래스를 정의하는 것도 새로운 타입을 생성하는 개념이기 때문에 기존 타입인 Int, String 등과 마찬가지로 대문자 카멜 규칙을 따르는 이름을 지어주는 것이 일반적이다.
- 클래스 내부의 프로퍼티나 메소드는 소문자 카멜 규칙을 따르는 이름을 지어주는 것이 일반적이다.
- 인스턴스가 생성 & 초기화된 후에 인스턴스의 프로퍼티에 접근하고 싶을 경우에는 '.' 를 사용한다.
- 다른 클래스를 상속받으려면 클래스 이름 오른쪽 옆에 ':' 를 붙이고 상속받을 클래스 (부모 클래스) 이름을 적어주면 된다.
- 참조 타입이기 때문에 클래스의 인스턴스를 상수 (let) 로 선언해도 내부 프로퍼티 값을 변경 가능하다. ([코드 1], [코드 2] 참고)
class Person {
var height: Float = 0.0
var weight: Float = 0.0
}
var r1verfuture : Person = Person()
r1verfuture.height = 158.0
r1verfuture.weight = 50.0
let whatso : Person = Person()
whatso.height = 35.0
whatso.weight = 0.5
- 참조 타입이기 때문에 더이상 참조할 일이 없으면 메모리에서 해제된다. (해제되기 직전에 deinit 메소드가 호출된다.)
deinit 메소드
- 클래스당 하나만 구현할 수 있다.
- 매개변수와 반환값을 가질 수 없다.
- 매개변수를 가질 수 없기 때문에 소괄호도 적어주지 않는다. (ex. deinit { })
- 프로그래머가 직접 호출할 수 없다.
- 인스턴스 소멸 전에 데이터를 저장하거나 다른 객체에 인스턴스 소멸을 알려야 하는 경우에는 deinit 메소드를 클래스 안에 따로 구현해두어야 한다.
Reference Type (Call By Reference)
- 데이터를 전달할 때 값의 메모리 위치 (주소) 를 전달한다.
- 데이터가 있는 위치를 전달했기 때문에 그 데이터를 참조하는 곳이라면 어디서든 원본에 접근이 가능하다.
- 값 타입에 비해 속도가 느리다.
참고