구조체와 열거형은 Swift에서 데이터를 모델링하고 추상화하는 데 사용되는 중요한 데이터 타입입니다. 이들은 각각 값(value) 타입으로, 모두 연관된 데이터와 기능을 캡슐화하여 사용합니다. 하지만 구조체와 열거형은 메모리에서 다르게 할당됩니다.
구조체
구조체는 기본적으로 스택(stack) 에 메모리가 할당됩니다. 스택은 후입선출(LIFO, Last In First Out) 방식으로 데이터를 저장하는 메모리 공간으로, 고정된 크기의 메모리 할당 및 해제가 빠르다는 장점이 있습니다. 구조체는 크기가 작고 간단할 때 적합하며, 스택을 이용하여 메모리를 관리하므로 빠른 속도로 데이터에 접근할 수 있습니다.
struct Point {
var x: Int
var y: Int
}
위의 코드에서 Point
구조체가 선언되었습니다. 이 구조체는 두 개의 정수형 변수 x
와 y
를 포함하고 있으며, 이러한 데이터의 인스턴스는 스택에 할당됩니다.
열거형
반면, 열거형의 경우 힙(heap) 과 스택(또는 데이터 세그먼트(data segment))에 메모리가 할당됩니다. 열거형은 경우에 따라 가변적인 크기의 메모리를 필요로 하며, 이러한 유연성을 위해 힙과 스택 모두에서 메모리를 할당받습니다.
enum CompassPoint {
case north
case south
case east
case west
}
위의 코드에서 CompassPoint
열거형이 선언되었습니다. 이러한 열거형은 north
, south
, east
, west
와 같은 네 개의 케이스를 가지고 있으며, 이 열거형의 인스턴스 또한 힙과 스택 중 어디에서든 할당될 수 있습니다.
결론
구조체는 스택에, 열거형은 힙과 스택 또는 데이터 세그먼트에 메모리가 할당됩니다. 이러한 차이는 각각의 사용 목적과 성능 요구에 따라 적절한 데이터 모델링을 선택하는 데 중요한 역할을 합니다.
참고 자료 - The Swift Programming Language