Swift

CGFloat

GREEN.1229 2023. 1. 20. 16:54

안녕하세요. 그린입니다🍏

이번 포스팅에서는 CGFloat에 대해 학습해보겠습니다🙌

 

우선 실수를 표현하는 기본 타입 중 Float와 Double을 아주 살짝 짚고 넘어가겠습니다🤫

 

Float vs Double

다들 기본 자료형에서 Float와 Double은 잘 아실거에요.

둘다 부동 소수점을 사용하는 실수를 나타내는 타입이죠.

흔히 Float는 32비트, Double은 64비트로 표현합니다.

즉 Float는 최대 6자리까지만 표현이 가능하고 Double은 15자리까지 표현이 가능하죠.

즉 우리는 대부분 어느정도 범위가 올지 예측하기 힘들때가 많으니 Double을 사용합니다.

 

그럼 CGFloat는 대체 뭘까요?

 

CGFloat

CGFloat는 Core Graphics 및 관련 프레임워크의 부동 소수점 스칼라 값에 대한 타입입니다.

@frozen struct CGFloat

이렇게 기본 자료형처럼 구조체로 되어 있고 Core Graphics 프레임워크 안에 들어있어요.

해당 유형의 크기는 CPU 아키텍처에 따라 결정됩니다.

만약 32비트 CPU로 빌드하는 경우에는 CGFloat 타입이 Float로 결정됩니다.

64비트 CPU로 빌드하게 되면 Double 타입으로 결정되요🙌

즉 정리해보면 사용하는 CPU에 따라 자동으로 Float와 Double로 결정이 될 수 있는 타입입니다.

 

코드를 한번 살펴볼까요?

@frozen public struct CGFloat {

    /// The native type used to store the CGFloat, which is Float on
    /// 32-bit architectures and Double on 64-bit architectures.
    public typealias NativeType = Double

    public init()

    /// Creates a new instance from the given value, rounded to the closest
    /// possible representation.
    ///
    /// - Parameter value: A floating-point value to be converted.
    public init(_ value: Float)

    /// Creates a new instance from the given value, rounded to the closest
    /// possible representation.
    ///
    /// - Parameter value: A floating-point value to be converted.
    public init(_ value: Double)

    public init(_ value: CGFloat)

    /// The native value.
    public var native: CGFloat.NativeType
}

요렇게 정의가 되어 있습니다.

보시면 이니셜라이저로 Float일지 Double일지 정의가 되어 있는걸 볼 수 있습니다.

간단 정리 끝!

 

마무리

너무 간단하게 끝나버렸지만 이렇게 Float 쓸까? Double 쓸까? 하는 경우가 있죠.

예를들어 View를 만들때 그림자를 위해 shadow를 구현하는데 이때 x, y좌표값을 넣곤 합니다.

이때 CGFloat 타입을 활용하게 됩니다.

아래와 같이 SwiftUI에서 제공하는 shadow 기능도 x, y 값을 CGFloat로 활용하는걸 볼 수 있습니다.

즉 코어 그래픽스 관련하여 뷰에 실수의 값이 필요할때 자주 사용하는것 같습니다🙌

@inlinable public func shadow(color: Color = Color(.sRGBLinear, white: 0, opacity: 0.33), radius: CGFloat, x: CGFloat = 0, y: CGFloat = 0) -> some View

 

[참고 자료]

https://developer.apple.com/documentation/corefoundation/cgfloat

 

Apple Developer Documentation

 

developer.apple.com