[swift] 구조체와 열거형의 메모리 할당 차이점

구조체와 열거형은 Swift에서 데이터를 모델링하고 추상화하는 데 사용되는 중요한 데이터 타입입니다. 이들은 각각 값(value) 타입으로, 모두 연관된 데이터와 기능을 캡슐화하여 사용합니다. 하지만 구조체와 열거형은 메모리에서 다르게 할당됩니다.

구조체

구조체는 기본적으로 스택(stack) 에 메모리가 할당됩니다. 스택은 후입선출(LIFO, Last In First Out) 방식으로 데이터를 저장하는 메모리 공간으로, 고정된 크기의 메모리 할당 및 해제가 빠르다는 장점이 있습니다. 구조체는 크기가 작고 간단할 때 적합하며, 스택을 이용하여 메모리를 관리하므로 빠른 속도로 데이터에 접근할 수 있습니다.

struct Point {
    var x: Int
    var y: Int
}

위의 코드에서 Point 구조체가 선언되었습니다. 이 구조체는 두 개의 정수형 변수 xy를 포함하고 있으며, 이러한 데이터의 인스턴스는 스택에 할당됩니다.

열거형

반면, 열거형의 경우 힙(heap)스택(또는 데이터 세그먼트(data segment))에 메모리가 할당됩니다. 열거형은 경우에 따라 가변적인 크기의 메모리를 필요로 하며, 이러한 유연성을 위해 힙과 스택 모두에서 메모리를 할당받습니다.

enum CompassPoint {
    case north
    case south
    case east
    case west
}

위의 코드에서 CompassPoint 열거형이 선언되었습니다. 이러한 열거형은 north, south, east, west와 같은 네 개의 케이스를 가지고 있으며, 이 열거형의 인스턴스 또한 힙과 스택 중 어디에서든 할당될 수 있습니다.

결론

구조체는 스택에, 열거형은 힙과 스택 또는 데이터 세그먼트에 메모리가 할당됩니다. 이러한 차이는 각각의 사용 목적과 성능 요구에 따라 적절한 데이터 모델링을 선택하는 데 중요한 역할을 합니다.

참고 자료 - The Swift Programming Language