본문 바로가기
🍎iOS프로그래밍/겨울방학 특강

Swift - @frozen을 알아보자

by 둥둥동동# 2022. 1. 23.
728x90

 

순서

@frozon이란?

이점

@unknown

 

@frozen이란?

 

Swift에선 @을 Attributes라고 부르는데 아래에서 어떤 기능을 하는지 알아보겠습니다

Swift의 기본 자료형들은 모두 @frozen으로 선언되어 있습니다

@frozen으로 선언된 구조체는 Stored프로퍼티를 추가할 수 없습니다

 

 

Double구조체에 extension으로 실습을 해보겠습니다

extension Double  {
    func printTest (){
        print("Testing")
    }
}
 
var A:Double = 10.1
A.printTest() //Testing
cs

자료형인 Double구조체에 printTest()메서드를 추가했습니다

Double형 변수를 만들고 메서드를 실행하니 정상적으로 출력되었습니다

 

 

 

이번엔 Stored프로퍼티를 추가해 보겠습니다

extension Double  {
    func printTest (){
        print("Testing")
    }
}
 
var A:Double = 10.1
A.printTest() //Testing
 
extension Double {
    var A = "A"
}// 에러발생
cs

 

Stored프로퍼티를 추가하니 컴파일러가 아래의 에러를 띄웠습니다

error: extentions must not contained stored properies

 

기본 자료형을 frozen을 추가한 이유는 기존 라이브러리에 선언된 모든 자료형이 영향을 받기 때문일 것 같습니다

만약 String형에 프로퍼티가 생기면 생성과 동시에 멤버 초기화가 필요한데

기존 라이브러리엔 초기화가 되어있지 않습니다

(computed프로퍼티는 Stored프로퍼티가 없으니 애초에 생성이 불가능)

 

 

장점

 

@frozen을 사용해서 얻을 수 있는 이점을 아래와 같습니다

 

•열거형 switch문 작성 시 default문을 생략해 컴파일 속도를 높일 수 있다고 합니다

func frozenExample(_ sizeClass: UIViewAnimatingState){
    switch sizeClass{
    case .active:
        break
    case .inactive:
        break
    case .stopped:
        break
    }
}
cs

 

+ @unknown

열거형 데이터를 추가할 경우 해당 cases는 본인도 모르는 사이에 Switch문 default에 빠질 수 있습니다

이 경우 @unknown을 추가하면 컴파일시 warning으로 빠진 case를 알려줍니다

swtich문은 case C가 없습니다 

@unknown을 붙이면 Warning을 띄웁니다

 

 

 

참고자료

https://jllnmercier.medium.com/swift-unknown-and-frozen-attributes-8d4eea52d5ac

https://chibest.tistory.com/99

https://docs.swift.org/swift-book/ReferenceManual/Attributes.html

 

Attributes — The Swift Programming Language (Swift 5.5)

Attributes There are two kinds of attributes in Swift—those that apply to declarations and those that apply to types. An attribute provides additional information about the declaration or type. For example, the discardableResult attribute on a function d

docs.swift.org

 

728x90

댓글