Swift Class VS Struct (3–1) Type Property

Jaehyeok
2 min readApr 20, 2024

--

출처 https://blog.naver.com/sns2113/222153768111

프로퍼티를 저번 포스트에서 정리하고 메서드 파트로 넘어가려고 했지만,

타입 저장 속성의 지연 저장 때문에, 이 개념에 대해 나의 흑신도사(newJunsung)과 함께 토론하며, 새롭게 배운 내용을 정리하고자 한다.

저번 포스트에서는 “타입 저장 속성은 접근 했을 때 우리가 일반적으로 인스턴스화 할 때 이니셜라이저로 초기화 하여 인스턴스화 하는 것처럼 접근 했을 때 해당 타입 저장 속성을 초기화하여 데이터 영역에 메모리를 올리게 되는 것”이라고 했었다. 저 문장에 오류가 있었다.

우선, 우리가 사용하는 메모리 영역(코데힙스)에서 데이터 영역을 살펴보자.

데이터 영역에는 전역변수와 Static 변수(Type Property)등이 저장된다.

데이터 영역은 컴파일 시점에 크기가 결정이 되고, 실행 도중 메모리의 크기가 변경이 되지 않는다(정적 할당)

데이터 영역 특성으로 인해서 포스트에 작성했던 글처럼 접근 했을 시 메모리에 올리게 되는 것이 아닌 static 변수가 생성이 되어 있는데 static 변수에는 접근하지 않았을 경우 nil인 상태이며, 크기가 정해져있는 값은 바로 할당이 되며, 다른 메모리 영역을 사용해야하는 경우에는 메모리 주소가 할당이 된다.

let 의미는 여기서 들어나게 된다.

더 이상 메모리 주소나 값을 변경시키지 않을 것이라는 의미이며, 데이터를 변경시키지 않는 다라는 의미와 같다.

아마 번역에서 lazy라는 단어 때문에 조금 헷갈렸던 것 같다.

지연 저장 속성은 힙영역에서 동적으로 할당되고,

타입 저장 속성은 데이터 영역에서 정적으로 할당이 된다.

타입 저장 속성을 잘 사용하지 않는 이유가 여기 있는 것 같다.

지정된 값이면 단번에 방문해서 값을 가져올 수 있지만, 다른 영역을 사용하는 경우 데이터 영역에 접근한 뒤, 또 다른 영역을 방문해야하기 때문에 여기서 오버헤드가 발생하기 때문에 잘 사용하지 않는 것 같다.

다음 포스트에서는 메서드에 대해 알아보자.

--

--