스택 영역에 위치합니다.
값 타입입니다.
상속이 불가능합니다.
struct 내 메소드로 저장 속성을 원칙적으로는 바꿀 수 없습니다. (mutating 키워드를 통해서 바꿀 수 있긴 합니다)
저장 속성 내 값을 할당하지 않아도, 멤버와이즈 초기화 구문을 통해 추후 값을 할당할 수 있습니다.
let 상수에 struct 인스턴스를 담으면 해당 인스턴스의 저장 속성 또한 let (상수화)되어서 변경이 불가능해집니다.
소멸자가 존재하지 않습니다.
struct는 스택 영역에 담겨서 실행이 종료되면 알아서 메모리를 빠져나가기 때문에 소멸자가 딱히 필요가 없습니다.
스택 영역에 담겨서 실행이 끝나면 스택을 빠져나가므로 메모리 관리를 할 필요가 없습니다.
인스턴스를 생성하면 힙 영역에 담깁니다.
참조 타입입니다. 인스턴스를 담은 변수를 다른 변수에 할당할 때 원본의 메모리 주소값을 넘겨줍니다.
상속이 가능합니다.
let 상수에 class 인스턴스를 담으면, 해당 인스턴스의 메모리 주소값을 변경할 수 없게 됩니다.
class 내 메소드를 이용해서 저장 속성을 변경할 수 있습니다.
convenience init을 사용할 수 있습니다.
저장 속성에 값을 반드시 할당해 주어야 합니다. 값을 할당하지 않을 경우 다음과 같이 처리해주어야 합니다.
1) 저장 속성에 값을 할당하든지
2) init 생성자를 통해서 초기화 구문을 만들어주든지
3) 옵셔널 타입을 적어줘야 합니다.
소멸자가 존재합니다.
힙 영역에 존재하므로 ARC를 통해 메모리를 직접 관리해줘야 합니다.
타입을 한정된 case 안에서 정의할 수 있는 타입입니다.
ex) 빨, 주, 노, 초, 파, 남, 보
ex) 동, 서, 남, 북
enum 내부에는 저장 속성을 만들 수 없습니다. 오직 case와 메소드 혹은 계산 속성만 사용할 수 있습니다.
값 타입입니다.