클래스와 구조체의 차이는 ‘참조 타입과 값타입’까지만 답변할 수 있는 내자신에게
진정한 개발자라면 그 이상을 대답해야 된다는 생각이 들어 깊게 학습하는 시간을 가졌다.
해당 글은메모리의 구조(code, data, heap, stack)에 대해 알고있는 가정 하 작성한다.
| 클래스 | 구조체 | |
|---|---|---|
| 타입 | 참조(refrence) | 값(value) |
| 인스턴스 저장(메모리) | heap 저장 | stack 저장 |
| 메모리 관리 | ARC 자동관리 | 스택 프레임 종료 시 메모리 자동 제거 |
클래스의 인스턴스는 공유가 가능한 heap영역에 존재
참조가 가능한 것구조체는 인스턴스 데이터를 전부 stack에 저장, struct자체는 메모리의 data에 존재
클래스는 인스턴스 데이터를 heap에 저장, 해당 Heap 주소를 가르키는 변수는 stack에 저장
// Yoonds 클래스 자체는 Data영역에 존재
class Yoonds {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
/*
1. 데이터 Yoonds, 10을 Heap에 저장
2. 데이터가 저장되어있는 Heap의 메모리 주소를 yoonds 변수에 보관
3. yoonds변수는 Stack에 저장
*/
let yoonds = Yoonds(name: "Yoonds", age: 10)