Class Struct Enum
Class
클래스는 상태 및 동작 구현에 대한 초기 값을 제공하는 객체 생성을 위한 청사진입니다. 클래스는 실제 개체를 모델링하고 데이터와 동작을 캡슐화하는 데 사용합니다. 클래스는 인스턴스를 생성할 수 있으며 각 인스턴스의 상태와 동작은 런타임에 동적으로 수정할 수 있습니다. 클래스는 부모 클래스에서 속성과 메서드를 상속할 수도 있으므로 기존 코드를 쉽게 하고 재사용하고 확장할 수 있습니다.
- 참조형식
- 민스턴스 데이터는 힙에 저장, 해당 힙을 가리키는 변수는 스택에 저장
- 메모리 주소값이 힙을 가르킴
- 값을 전달하는 것이 아니고, 저장된 주소를 전달
- 힙의 공간에 저장, ARC 시스템을 통해 메모리 관리
- 인스턴스 상수로 선언하면 가르키는 인스턴스 고정
- 소멸자 있음
- 상속 가능
Struct
Struct는 값 유형 데이터 구조입니다. 관련 값 세트를 캡슐화하는 사용자 정의 데이터 유형을 정의하는데 사용됩니다. 구조체는 클래스와 유사하지만 차이점이 있습니다.
- 구조체는 변수에 할당되거나 함수에 인수로 전달될 때 복사되는 값 유형입니다. (클래스는 참조 유형)
- 값형식입니다.
- 구조체는 다른 구조체나 클래스에서 상속할 수 없습니다.
- 구조체에는 초기화 해제자가 없습니다.
- 인스턴스 상수로 선언시 저장 속성이 전부 상수로 선언됨
- 상속이 불가능함
- 소멸자가 없음
- mutating을 사용하지 않으면 메서드 내에서 속성 변경 원칙적으로 불가능
- 스택으로 복사전달을 하여 메모리에서 자동제거합니다.
Enum
Enum은 관련 값 집합의 정의하는 데이터 유형입니다. 열거형은 공통 유형을 나타내는 명명된 값의 그룹으로 생각할 수 있습니다.
- Enum은 새로운 유형을 정의하고 Swift의 다른 유형처럼 사용할 수 있습니다.
- Enum은 연관된 값을 가질 수 있으므로 각 케이스가 고유한 값을 저장할 수 있습니다. (값 타입입니다.)
- Enum은 클래스 및 구조체와 마찬가지로 메서드 및 계산된 속성을 가질 수 있습니다.
- Enum은 프로토콜을 준수할 수 있으며 다른 경우를 처리하기 위해 switch문에서 사용할 수 있습니다.
값 형식
- Value Type
- 필요시에 항상 메모리의 값이 복사되어 전달
- 값 저장은 Stack으로 합니다.
- 값이 들어있는 스택의 스코프가 종료되면 메모리에서 자동 제거
- 튜플, 열거형, 컬렉션, 구조체
참조형식
- Reference Type
- 필요시에 항상 메모리의 주소를 전달
- 값의 저장: heap (주소를 Stack에 저장)
- RC(Reference Counting)을 통해 메모리를 관리 Swift에서 사용하는 ARC 모델
- 클래스, 클로저
referrence semantic
참조 시맨티에서(class) 변수는 개체의 실제 값을 저장하지 않고 대신 개체가 저장된 메모리 위치에 대한 참조를 저장합니다. 즉, 여러 변수가 동일한 개체를 참조하는 경우 해당 개체에 대한 모든 변경 사항은 해당 개체를 참조하는 모든 변수에 영향을 미칩니다. 이것은 프로그래머가 참조된 개체의 공유 특성을 인식하지 못하는 경우 때때로 의도하지 않은 부작용으로 이어질 수 있습니다.