Swift
Swift: 구조체 vs 클래스
HaningYa
2020. 7. 13. 14:33
728x90
Struct
구조체의 인스턴스는 값 타입 --> 전달될 값이 복사되어 전달된다.
스위프트 기본 타입(Bool, Int, Array, Dictionary, Set, String 등) 구조체로 구현되어 있음
Class
클래스의 인스턴스는 참조 타입 --> 전달될 값이 복사되지 않고 참조(주소)가 전달된다.
*같은 곳을 참조하는지 확인을 위해 === 를 사용한다.
공통점
- 값을 저장하기 위해 property 를 정의 가능
- 기능 실행을 위해 method 정의 가능
- subscript 문법을 통해 구조체 또는 클래스가 갖는 값에 접근하도록 서브스크립트를 정의 가능
- 초기화 될 때 상태를 지정하기 위한 init 정의 가능
- 기능 추가를 위한 extension 가능
- 특정 기능 실행을 위한 프로토콜 준수 가능
차이점
- 구조체는 상속 불가능
- 타입 캐스팅은 클래스 인스턴스만 가능
- deinit은 클래스 인스턴스만 가능
- 참조 횟수 계산 (Reference Counting)은 클래스 인스턴스만 가능
구조체 사용이 권장되는 조건
- 연관된 간단한 값의 집합을 캡슐화 하는 것만이 목적일 때
- 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
- 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
- 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때
클래스 사용이 권장되는 조건
- 구조체 조건이 아닌 모두
*Subscript
오늘의 Swift 상식 (Subscript)
서브스크립트란?
medium.com
*ARC(Reference Counting)
[Swift]Automatic Reference Counting 정리
자동 참조 계수(Automatic Reference Counting) Swift는 앱의 메모리 사용을 추적하고 관리하는 자동 참조 계수(ARC)를 사용. 대부분의 경우에 메모리 작업은 잘 작동하며, 메모리 관리를 생각할 필요 없다.
minsone.github.io
728x90