클래스와 구조체는 다음과 같은 특성을 정의하는 범용 템플릿입니다.
부동산 방법/기능 이니셜라이저 프로토콜 연장선 클래스와 구조체는 정의에 사용되는 키워드를 제외하면 비슷해 보입니다.
예:
struct A{
var name = "Ajith"
var age = 10
var run(){...}
}
class B {
var name = "Ajith"
var age = 10
var run(){...}
}
둘의 공통점은?
둘 다 속성, 메서드, 이니셜라이저, 프로토콜, 확장이 있음 해당 값에 액세스하기 위한 첨자를 제공합니다.
실패 가능한 초기화를 둘 다에서 사용할 수 있음 둘 다의 속성 및 메서드는 .(점) 구문을 사용하여 액세스합니다. 수업에서만 사용할 수 있는 것:
deinit는 클래스에만 사용할 수 있습니다. 클래스는 다른 클래스의 특성을 상속할 수 있습니다. 구조체는 다른 구조체에서 상속할 수 없습니다. 참조 카운트에서는 둘 이상의 참조를 허용합니다. 런타임 시 클래스 인스턴스 유형을 확인할 수 있습니다. 구조체에서만 사용할 수 있는 것:
구조체에 기본 멤버별 이니셜라이저가 있습니다. 클래스의 경우 명시적으로 정의해야 합니다. Struct에는 변경하기 어려운 많은 버그가 발생할 수 있는 값을 변경할 수 있는 변경 사항이 없다는 변경 안전의 이점이 있습니다. 구조체와 클래스의 차이점:
Class는 키워드 "class"를 사용하고 Struct는 키워드 "struct"를 사용합니다. 함수에서 struct의 self 속성을 수정하려면 함수 시작 부분에서 변경을 정의해야 합니다. 수업은 아무것도 필요하지 않습니다. 가장 큰 차이점 중 하나는 값과 참조 유형입니다. let 속성을 사용하여 구조체 인스턴스를 만드는 경우 해당 속성을 수정할 수 없습니다. let 속성으로 클래스 인스턴스를 생성하면 해당 속성을 수정할 수 있습니다. 값 대 참조 유형:
클래스는 참조 유형입니다. 즉, 클래스 인스턴스가 저장된 메모리의 위치에 대한 참조를 의미합니다. 구조체와 열거형은 값 유형입니다. 즉, 각 참조에 고유한 데이터 복사본이 있음을 의미합니다.
클래스의 인스턴스를 다른 참조에 공유/할당하는 경우 이러한 모든 참조에는 단일 공유 데이터가 있습니다. 즉, 해당 클래스 인스턴스의 모든 변경 사항을 모든 참조에서 사용할 수 있음을 의미합니다.
구조체의 인스턴스를 다른 참조에 공유/할당하면 모든 참조가 자체 메모리를 만들어 데이터를 저장합니다. 한 참조에서 구조체를 변경해도 다른 참조에는 영향을 주지 않습니다. 클래스와 구조체 모두에 대한 메모리 할당이 다릅니다. 이러한 차이 때문에 클래스와 구조체는 인스턴스를 공유하는 동안 다르게 동작합니다.
Value types are stored in stack memory and reference type are stored in heap memory.