Class, Struct의 공통점
- 값을 저장할 프로퍼티를 선언할 수 있다.
- 함수적 기능을 하는 메서드를 선언할 수 있다.
- 내부 값에 '.'을 사용하여 접근 가능하다.
- 생성자를 사용해 초기 상태를 설정할 수 있다.
- extension을 사용하여 기능을 확장할 수 있다.
- Protocol을 채택하여 기능을 설정할 수 있다.
Class, Struct 차이점
Class
- 참조 타입
- Heap 영역에 동적으로 할당돼서 Stack 영역보다 접근 속도가 느리다
- Heap 영역은 스레드가 메모리를 공유하는 공간이기 때문에 스레드로부터 안전하지 않으므로 thread lock 기능이 필요하다 → 오버헤드 가능성 있음
- 같은 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 준다.
- ARC로 메모리를 관리한다.
- 상속 가능
- 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있다.
- deinit을 사용하여 메모리 할당을 해제할 수 있다.
- Objective-C와 상호 운용성을 원하는 경우 사용한다.
Struct
- 값 타입
- Stack 영역에 할당되어 하나의 명령어로 메모리를 할당, 해제할 수 있다.
- 컴파일 단계에서 언제 생성되고 해제되는지 예측이 가능하다.
- 스레드들이 각각 독립적인 Stack 공간을 가지고 있기 때문에 상호 배제를 위한 자원이 필요하지 않는다. -> 스레드로부터 안전하다.
- Heap 영역보다 접근속도가 빠르다.
- 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당된다.
# 참고한 사이트
'iOS > Swift 상식' 카테고리의 다른 글
Swift - Any vs AnyObject (0) | 2023.01.23 |
---|---|
Swift - Convenience init (0) | 2023.01.23 |
Swift - Copy On Write(COW) 동작 방식 (0) | 2023.01.23 |
Swift - Class 성능 향상 시키는 방법 (0) | 2023.01.07 |
iOS - Storyboard vs Code (0) | 2023.01.07 |