클래스와 구조체는 Swift에서 사용되는 두 가지 데이터 타입입니다. 둘 다 멤버 변수와 멤버 함수를 포함하는 자체적인 타입을 정의할 수 있습니다.
구조체에 기본 생성된 이니셜라이저의 매개변수는 구조체 프로퍼티 이름으로 자동 지정됩니다. 인스턴스가 생성되고 초기화된 후 프로퍼티 값에 접근하고 싶다면 마침표(.)를 사용하면 됩니다.
let 선언 시 인스턴스 내부 프로퍼티 값 변경 X
var 선언 시 인스턴스 내부 프로퍼티 값 변경 O
struct 구조체 이름 {
프로퍼티, 메소드 }
var 이름 = 구조체이름()
스위프트의 클래스는 부모클래스가 없더라도 상속 없이 단독으로 정의가 가능합니다.
class 클래스 이름 {
프로퍼티, 메소드 }
class 클래스 이름 : 부모클래스 이름 {
프로퍼티, 메소드 }
구조체와 다르게 참조 타입이므로 let으로 선언을 해도 내부 프로퍼티 값을 변경할 수 있습니다.
클래스의 인스턴스는 참조 타입이므로 더는 참조할 필요가 없을 때 메모리에서 해제됩니다. 소멸되기 직전 deinit라는 메소드가 호출됩니다. 클래스 내부에 deinit 메소드를 구현해주면 소멸되기 직전에 호출됩니다. 호출되는 메소드는 디이니셜라이저라고 부릅니다. 클래스당 하나만 구현할 수 있으며, 매개변수와 반환 값을 가질 수 없습니다.
일반적으로 클래스는 상속이 필요하거나 참조 타입의 특성이 필요한 경우에 사용됩니다. 구조체는 간단한 데이터 구조를 표현하거나 값 복사가 필요한 경우에 사용됩니다. 또한, 구조체는 값 타입이므로 스레드 안정성이나 코드 예측 가능성을 높이는 데 도움이 될 수 있습니다.
참고(출처) : 개발하는 정대리, 야곰(swift5)