0Pricing
Swift Academy · 강의

스택과 힙: 값이 저장되는 위치

구조체는 스택에, 클래스는 힙에 저장되는 방식과 성능상의 영향을 알아봅니다.

스택과 힙: 값이 저장되는 위치은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

시작하기

스위프트 값이 메모리의 어디에 저장되는지, 즉 스택과 힙의 차이를 이해하는 것은 성능이 좋고 예측 가능한 코드를 작성하는 데 필수적입니다.

스택

스택은 자동으로 관리되는 연속된 메모리 블록입니다: • 함수의 지역 변수와 매개변수가 이곳에 저장됩니다 • 할당은 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 스택과 힙: 값이 저장되는 위치
  2. 변경, 공유 및 예기치 않은 별칭
  3. 값과 참조가 섞인 그래프
  4. 값 의미론을 위한 API 설계
← Swift Academy(으)로 돌아가기