스위프트의 구조체는 여타의 C 기반 언어의 구조체에 비해 훨씬 강력하다. 그런데 클래스는 그러면 언제 사용해야 할까?
애플의 Swift Programming Language Guide에서는 다음과 같이 제시하고 있다
- 기본적으로는 구조체를 사용하라.
- Swift의 구조체는 다른 언어의 클래스로 취급될 정도의 많은 기능을 포함한다.
- 예를 들면, stored property, computed property, method 등이 있다.
- 게다가, 프로토콜을 채택할 수 있다.
- 구조체는 value 타입이기 때문에 앱의 상태를 고려할 필요가 없다.
- Objective-C 와의 상호작용이 필요할 때는 클래스를 사용하라.
- 데이터를 처리해야 하는 Objective-C API를 사용하거나 프레임워크에 정의된 기존 클래스 계층에 맞춰야 하는 경우 클래스, 및 클래스 상속을 사용해서 데이터를 모델링해야 할 수 있다.
- 모델링 중인 데이터의 주소값을 제어해야 하는 경우 클래스를 사용하라.
- Swift의 클래스는 참조 유형이기 때문에 주소값 개념이 있다 (===, !== 연산자 같은)
- 또한 앱 전체에서 클래스의 인스턴스를 공유할 때 해당 인스턴스에 대한 변경 사항이 해당 인스턴스에 대한 참조를 보유하는 코드의 모든 부분에서 영향을 주고 싶을 때가 있을 것이다. 물론 조심히 사용해야 한다.
- 구현의 공유를 위한 행동 채택을 위해서 프로토콜과 함께 구조체를 사용하라.
- 구조체와 클래스는 모두 상속 형식을 지원하나, 구조체와 프로토콜은 프로토콜만 채택할 수 있다. 클래스 상속은 다른 클래스와만 호환된다.
- 데이터를 모델링하는 방법을 선택할 때 먼저 프로토콜 상속을 사용해서 데이터 유형의 계층 구조를 구축한 다음 구조에서 해당 프로토콜을 채택한다.
위 가이드를 참고하여 앞으로 클래스와 구조체중 어느 것을 사용할 지 고민할 때 활용해보자
출처: https://developer.apple.com/documentation/swift/choosing-between-structures-and-classes