가장 큰 특징은 참조타입(call by reference)이다.
참조 타입의 인스턴스를 만들면 Heap 영역에 할당이 된다. Heap 영역에 저장된 실제 정보는 스택 영역에 해당 힙 영역을 가르키는 참조(주소)가 저장이 되서 정보를 가져온다.
클래스 인스턴스는 참조타입이기 때문에 var가 아닌 let으로 선언해도 내부 프로퍼티를 변경할 수 있다.
클래스의 또 다른 특징은 상속
이 가능하다.
클래스는 이니셜라이저가 필요하다(프로퍼티에 기본값을 할당했을 경우 필요 없음.)
구조체는 참조타입이 아닌 값 타입이다.
힙 영역을 찾을 필요가 없어 클래스보다 빠르다.
값 타입이기 때문에 let으로 선언한 인스턴스는 값을 변경할 수 없다.
또한 var로 선언한 인스턴스라도 let 프로퍼티면 변경할 수 없다.
구조체는 상속이 불가능하다.
구조체는 이니셜라이저를 자동으로 만들어준다.(직접 만들 수도 있음.)
enum은 값 타입이다.
연관된 값들을 한 곳에 묶어놓은 타입
이다.
case들에 값을 정해주지 않아도 하나하나가 고유의 값이다.(지정된 값을 사용하고 싶다면 원시 값을 설정한다.)
enum은 상속이 불가능하다.