시작하기
스위프트 값이 메모리의 어디에 저장되는지, 즉 스택과 힙의 차이를 이해하는 것은 성능이 좋고 예측 가능한 코드를 작성하는 데 필수적입니다.
스택
스택은 자동으로 관리되는 연속된 메모리 블록입니다:
• 함수의 지역 변수와 매개변수가 이곳에 저장됩니다
• 할당은 O(1)입니다. 포인터만 이동하면 됩니다
• 범위를 벗어나면 자동으로 해제됩니다
• 스레드 로컬이므로 각 스레드에 자체 스택이 있습니다
힙
힙은 수명이 긴 할당을 위한 공유 메모리 영역입니다:
• 객체의 수명이 하나의 범위를 넘어가면 이곳에 저장됩니다
• 빈 메모리를 찾아야 하므로 할당 비용이 더 높습니다
• 클래스의 경우 ARC가 관리합니다
• 여러 스레드가 공유하므로 동기화가 필요합니다
구조체는 스택에 저장됩니다
```swift
func compute() {
var pt = CGPoint(x: 3, y: 4) // on the stack
pt.x += 1
} // pt freed automatically
```
작은 구조체는 복사되어 전달되므로 힙 오버헤드가 발생하지 않습니다.
클래스는 힙에 저장됩니다
```swift
class Dog {
var name: String
init(name: String) { self.name = name }
}
var d = Dog(name: "Rex") // Dog instance on heap
// 'd' is a pointer on the stack
```
큰 구조체는 힙을 사용할 수 있습니다
큰 구조체(배열, 문자열, 큰 값 타입)는 값 타입처럼 동작하더라도 내부적으로 COW와 힙 저장 공간을 사용합니다:
```swift
var arr = [Int](repeating: 0, count: 10_000)
// The array's buffer is on the heap; 'arr' itself is a stack value
```
클로저에서 값 캡처하기
클로저가 범위를 벗어난 뒤에도 유지되어야 하는 값 타입 변수를 캡처하면 스위프트는 해당 변수를 힙에 박싱합니다:
```swift
var count = 0
let increment = { count += 1 } // count captured in a heap box
increment()
print(count) // 1
```
프로토콜 실존 타입 박싱
작은 값 타입을 `any Protocol` 변수에 저장하면 힙 할당이 발생할 수 있습니다(실존 타입 박싱):
```swift
var shape: any Shape = Circle(radius: 5) // may allocate on heap
```
작은 타입(3워드 이하)은 인라인으로 저장되고, 더 큰 타입은 박싱됩니다.
할당 측정하기
힙 할당을 확인하려면 인스트루먼츠의 할당 템플릿을 사용합니다:
1. 프로파일링 > 할당
2. 클래스 또는 범주별로 필터링
3. `alloc`과 `dealloc` 횟수를 추적
반복문에서 할당 횟수가 높다면 예상하지 못한 박싱이 발생하고 있다는 뜻일 수 있습니다.
설계에 미치는 영향
• 수명이 짧은 데이터 보관 타입에는 구조체를 우선 사용합니다. 스택이 더 빠릅니다
• 식별성이나 공유 상태가 필요할 때는 클래스를 사용합니다
• 긴밀한 반복문 안에서 할당하지 않도록 `reserveCapacity`로 미리 할당합니다
• 최적화하기 전에 프로파일링합니다. 성급한 최적화는 시간을 낭비합니다
빠른 확인
함수 범위를 벗어날 때 자동으로 해제되는 메모리 유형은 무엇인가요?
복습
핵심 내용:
• 스택: 저렴하고 자동으로 관리되며 스레드 로컬인 값 타입 저장 공간
• 힙: 유연하고 ARC로 관리되는 참조 타입 저장 공간
• 큰 구조체는 내부 힙 버퍼를 사용합니다(COW)
• 변수를 캡처하는 클로저는 해당 변수를 힙에 박싱합니다
• 예상하지 못한 힙 부담을 감지하려면 인스트루먼츠의 할당 도구를 사용합니다
다음: 변경, 공유, 예상하지 못한 별칭
자주 묻는 질문
“스택과 힙: 값이 저장되는 위치” 강의는 무료인가요?
네 — “스택과 힙: 값이 저장되는 위치” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“스택과 힙: 값이 저장되는 위치”에서 뭘 배우나요?
구조체는 스택에, 클래스는 힙에 저장되는 방식과 성능상의 영향을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“스택과 힙: 값이 저장되는 위치” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.