이전아티클에서 클래스와 구조체의 공통적인 기능과 특징에 대해서 알아보았다. 그렇게 많은 공통점을 가진 클래스와 구조체인데 왜 두가지로 나눠서 사용하나? 둘의 가장 큰 차이점인 메모리에 저장되는 관점이며, 이를 알기 위해선 값타입과 참조타입를 알아야 한다! 같이 알아보자!
실제 인스턴스가 Stack 영역에 생성된다!
→ 구조체, 열거형, 튜플, 컬렉션 타입이 값타입의 대표적인 예시이다.
아래의 구조체가 메모리에 어떻게 저장되는지 같이 알아보자!
struct SoptMemberStruct {
var part: String
var name: String
init(part: String, name: String) {
self.part = part
self.name = name
}
}
var hidi: SoptMemberStruct = SoptMemberStruct(part: "아요", name: "류희재")
아래 그림처럼 Struct는 Data 영역에 추가되고, hidi라는 실제 인스턴스는 Stack영역에 할당된다.
heap 메모리 영역에 실제 인스턴스가 저장되고, stack 메모리 영역에 heap 영역에 있는 실제 인스턴스의 메모리 주소만 가지고 있다
→ 클래스와 클로저가 참조타입의 대표적인 예시이다.
아래의 클래스가 메모리에 어떻게 저장되는지 같이 알아보자!
class SoptMemberClass {
var part: String
var name: String
init(part: String, name: String) {
self.part = part
self.name = name
}
}
var hidi: SoptMemberClass = SoptMemberClass(part: "아요", name: "류희재")
아래 그림처럼 Class는 Data 영역에 추가되고, hidi라는 실제 인스턴스는 Heap영역에 할당된다. 그리고 Stack 메모리에 있는 hidi의 주소값만 가지고 있다.
둘의 메모리 저장 방식에 대해서 살펴보았다. 근데 도대체 실질적인 차이점이 뭔데??? 를 이제 알아보자