공통점
- 여러 변수(속성)와 함수(메소드)를 담을 수 있는 하나의 집합입니다.
- 데이터를 용도에 맞게 묶어서 사용할때 편리하고 가독성을 높여줍니다.
- 초기화를 정의하여 여러 매개변수에 대해 다양한 인스턴스를 생성 가능합니다.
- 기본적인 구현을 넘어선 기능을 확장시킬 수 있도록 확장이 가능합니다.
- 점(.)을 사용하여 인스턴스의 속성과 메소드에 접근할 수 있습니다.
- 인스턴스 생성이 가능하고 생성 방법이 같습니다.
- 특정 종류의 표준 기능을 제공하는 프로토콜을 사용 가능합니다.
- 새로운 데이터 타입을 만들어 주는 것 입니다.
차이점
- 구조체에는 init()메소드 없이 자동으로 초기화 함수를 만들어 줍니다.
- 클래스에서는 상속이 가능하지만 구조체는 불가능합니다.
- 구조체는 값 타입이지만 클래스는 참조 타입입니다.
- 타입캐스팅은 클래스의 인스턴스에만 허용합니다.
- 디이니셜라이저는 클래스의 인스턴스에만 활용 가능합니다.
- 참조 횟수 계산(Reference Counting)은 클래스의 인스턴스에만 적용합니다.
가장 큰 차이점
- 구조체(struct)는 값 타입입니다.(값 복사)
- 클래스(class)는 값을 참조 타입입니다.
struct A {
var a = 10
}
class B {
var a = 10
}
var str_1: A = A()
var cls_1: B = B()
var str_2 = str_1
var cls_2 = cls_1
str_1.a = 20
cls_1.a = 20
![](https://velog.velcdn.com/images/changbro/post/24fb2425-73d1-4b34-9d60-fe4a3c667d33/image.png)
print("\(str_2.a) \(cls_2.a)")