frozen이란,
데이터 구조의 불변성을 보장하기 위해 해당 데이터 구조를 변경할 수 없도록 설정하는 것을 말한다.
즉, frozen이 표시도니 데이터 구조는 한번 생성되면 내부 레이아웃이 런타임에 변경되지않으며, 수정 할 수 없는 불변상태를 유지한다.
주로 구조체나 열거형에 이 어노테이션을 사용한다.
불변성이 보장되면 컴파일러가 더 효율적인 코드를 생성할 수 있으며, 인라인화와 같은 최적화가 가능해진다.
또한 런타임 라이브러리와 상호작용하는 방법에 영향을 미칠 수 있다.
아래와 같이 어노테이션으로 표기한다.
@frozen struct Point {
var x: Double
var y: Double
}
// 이 구조체는 불변성이 보장되므로 @frozen 어노테이션을 사용한다.
swift에서 대표적인 구조들이며 이밖에도 여러 구조들이 있다.
-
String: Swift의 문자열 타입인 String
- String은 불변성을 가지며, 내부 레이아웃이 런타임에 변경되지 않는다.
-
Array: Swift의 배열 타입인 Array
- 배열은 불변성을 가질 수 있지만, 가변성을 지닌 배열도 생성할 수 있다.
- 배열의 내부 레이아웃이 런타임에 변경되지 않는다.
-
Set: Swift의 집합 타입인 Set
- 집합도 배열과 마찬가지로 불변성과 가변성을 가질 수 있으며, 내부 레이아웃이 런타임에 변경되지 않는다.
-
Dictionary: Swift의 딕셔너리 타입인 Dictionary.
- 딕셔너리도 불변성과 가변성을 가질 수 있으며, 내부 레이아웃이 런타임에 변경되지 않는다.
-
Range: Swift의 범위 타입인 Range
- 범위 역시 불변성을 가지며, 내부 레이아웃이 런타임에 변경되지 않는다.
- 230804: 초안작성