Swift 에서 구조체와 클래스를 구분해서 사용하는 것은 매우 중요한 부분 이라고 한다.
구조체와 클래스는 서로 비슷하기도 하지만 구분해야할 다른 점들도 많은데, 이번에 정리를 해보려고 한다.
[구조체와 클래스의 공통점]
- 값을 저장하기 위해 프로퍼티를 정의할 수 있다.
- 기능을 구현하기 위한 메서드를 정의할 수 있다.
- 초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있다.
- 새로운 기능 추가를 위해 extension을 통해 확장할 수 있다.
- 특정 기능을 수행하기 위해 특정 프로토콜을 준수할 수 있다.
[구조체와 클래스의 각각의 특징]
struct
- call by value로 값의 복사가 일어남 (값타입)
- stack메모리 영역에 할당이 된다 -> 속도가 빠르다. 하지만, 32768바이트만 사용이 가능해서 상용화 앱에서는 쓰기 어려운 단점이 있다. -> stack이 overflow뜨면 앱은 죽지 않고 그 전까지 데이터만 쌓이게 된다.
- 구조체를 상속하는 것은 불가능 하다.
- 구조체는 ARC에 해당되지 않는다. (열거형도 해당되지 않는다.)
struct 구조체이름 {
}
class
- call by reference로 참조 타입 (할당될 당시, 객체를 가리키고 있는 메모리 주소값만 복사가 된다.)
- Heap 메모리 영역에 할당이 된다 -> 속도가 느리다 (ARC가 이루어지는 영역)
- 상속이 가능하다.
class 클래스이름 {
}
요정도로 이론적인 부분을 정리해두고, 코드로 구현해 봐야겠다.
'iOS' 카테고리의 다른 글
Swift 싱클톤 패턴 (0) | 2020.11.10 |
---|---|
Swift Joined() (0) | 2020.10.19 |
Swift 프로토콜 (0) | 2020.04.13 |
Swift 클로저 (0) | 2020.04.06 |
Swift 메모리 관리 (0) | 2020.04.03 |