Struct & Class 의 차이점

  1. 클래스와 구조체의 가장 큰 차이점은 메모리 저장 방식에 있다
  2. 클래스와 구조체는 메소드 호출 방식이 다르다.

1. 인스턴스 생성 시 메모리 저장 방식

Strcut

**struct** Animal {
	var name = "Animal"
}

var a = Animal()
var b = a
a.name = "Dog"
a.name == b.name // false

Class

**class** Animal {
	var name = "Animal"
}

var a = Animal()
var b = a
a === b // true
a.name = "Dog"
a.name == b.name // true

Summary

구분 Struct Class
타입 Value Type Reference Type
인스턴스 전달 복사한 값 전달 메모리 주소 전달
메모리 저장 위치 Stack Heap
메모리 관리 스택 프래임 종료 시 메모리에서 자동제거 ‣ 관리
인스턴스 선언 let의 경우 저장 속성이 전부 상수로 선언 및
저장속성이 var 선언 관계없이 변경 불가 let의 경우 가리키는 메모리 주소 변경 불가
저장속성은 자신의 let/var 선언에 다름
생성자 관련 멤버와이즈 이니셜라이저 제공 편의 생성자 제공
메소드 + 속성 Mutating 메소드에서만
메소드 내에서 속성값 변경 가능 메소드 내에서 속성값 변경 가능
소멸자 없음 제공
상속가능여부 상속 불가 상속 가능

2. Dynamic Dispatch & Static Dispatch

Dynamic Dispatch

Static Dispatch

Summary