코드, 데이터, 힙, 스택 영역에 대한 이해
코드 영역
프로그램의 실행 코드가 저장되는 공간
컴파일된 소스 코드와 프로그램의 명령어들이 저장되어있음
읽기 전용 영역이며 프로그램에서 실행되면서 수정되지 않음
데이터 영역
전역 변수, 정적 변수(static), 상수가 저장되는 공간
프로그램 시작 시 할당되며 프로그램 종료 시까지 유지
힙 영역
Heap 영역은 프로그램 실행 중(런타임) 동적으로 할당된 데이터가 저장되는 곳 입니다.
힘은 런타임 중에 메모리 할당이 필요한 경우 사용되며, 개발자가 직접 제어할 수 있습니다.
힙에 저장된 데이터는 직접적으로 포인터를 통해 접근(참조)됩니다.
힙은 스택과 달리 메모리의 자유 공간을 사용하여 데이터를 저장하므로, 크기나 생존 기간에 대한 동적인 요구에 대응할 수 있습니다
참조타입(reference Type)이 저장되는 영역
ARC :Automatic Reference Counting
Heap 영역의 객체에 대한 Strong Reference(강한참조) count를 추적하고, 객체가 더 이상 필요하지 않을 때 (참조 count가 없을 때) 해당 객체에 대한 메모리 를 자동으로 해제하는 방식으로 메모리를 관리
Strong Reference (강한 참조)
기본적으로 Swift에서 변수나 상수는 Strong Reference(강한참조) 합니다.
객체에 대한 Strong Reference(강한참조) count가 증가되어 있다면, 해당 객체는 메모리에 유지됩니다.
Circular References (순환 참조)
ARC 작동 방식의 특성상 두 객체가 서로를 강하게 참조하는 경우, 순환참조가 발생합니다.
두 객체 모두 더이상 사용되지 않더라도 두 객체가 서로를 강하게 참조하는 경우, Strong Reference count가 감소하지 않아, 메모리에서 해제되지 못하고 메모리가 누수되는 문제 가 발생합니다.
이러한 문제를 해결하기 위해, 약한 참조(weak reference)와 미소유 참조(unowned reference) 같은 다른 참조 유형을 사용할 수 있습니다.
순환 참조를 방지하기 위한 두 가지 참조 방법
Weak Reference (약한 참조)
약한 참조는 Strong Reference (강한 참조)와는 달리 객체의 참조 count
증가시키지 않습니다.
객체의 생명 주기에 영향을 주지 않으면서 참조를 유지할 수 있습니다.
주로 순환 참조(circular references)를 방지하기 위해 사용됩니다.
Unowned Reference (미소유 참조)
미소유 참조는 약한 참조와 유사하지만, optional 값이 아니라, nil로 설정될 수 없습니다.
만일 참조하는 객체가 이미 메모리에서 해제된 상태에서 접근하려 하면 runtime error가 발생되며, 사용 시점에 객체가 이미 해제되지 않았다고 확신할 수 있는 경우에 사용됩니다.
URL의 구성 요소
JSON 관련 프로토콜 종류
Decodable 프로토콜
Decodable 프로토콜은 데이터를 객체로 디코딩할 때 사용됩니다.
즉, 외부 데이터(JSON)를 Swift의 데이터 모델로 변환하는데에 필요한 프로토콜입니다.
Codable 프로토콜
Codable 프로토콜은 두 가지 하위 프로토콜, Encodable과 Decodable 을 결합한 것입니다.
외부 데이터(JSON)를 Swift의 데이터 모델로 변환,Swift의 데이터 모델을 외부 데이터(JSON)로 변환을 모두 수행하여야 할 때에, Codable 프로토콜을 사용할 수 있습니다.
Json -> Model 변환하기
'iOS > TIL (Today I Learned)' 카테고리의 다른 글
국비지원 코딩 부트캠프 '내일배움캠프' 직접 다녀온 생생한 후기 (1) | 2024.07.14 |
---|---|
[240412] 위시리스트 머저리 | TIL (7) | 2024.04.12 |
[240403] KIOSK #3 | TIL (0) | 2024.04.03 |
[240402] KIOSK #2 | TIL (0) | 2024.04.02 |
[240401] KIOSK #1 | TIL (0) | 2024.04.01 |