[iOS] UIColor와 CGColor의 차이점을 알아보자

2021. 12. 17. 23:14UIKit, SwiftUI, H.I.G

최근, 다크 모드 대응에 관해서 빡세게 공부를 하고 있는 와중에
UIColor가 들어가는 부분과 CGColor과 들어가는 부분이 엄격하게 구분되어 있는 것을 보고 이 두개의 차이점이 궁금해졌다.

그래서 오늘은 한번 UIColor와 CGColor의 차이점을 알아보려 한다.


일단, 공식문서를 살펴보면

UIColor는 색상 데이터와 불투명도를 저장하는 개체,
CGColor는 색상 해석 방법을 지정하는 색상 공간과 함께 색상을 정의하는 구성요소 집합이라는 설명이 쓰여 있었다.

아직, 감이 잘 안오지만, 더 직접적으로 비교해보자.

가장 크게 비교할 수 있는 부분이 등장했다.

UIColor는 우리가 정말 많이 그동안 다루었던 UIKit 프레임워크의 하위 요소, 즉 User Interface를 다루는 곳에서 지정하는 색상이고,

CGColor는 Core Graphics라는 iOS에서 "그리기"를 담당하는 프레임워크의 하위 요소인 것을 확인할 수 있다.

즉, UIKit 프레임워크에서 사용하는 요소의 색상값은 → UIColor로 지정
Core Graphics 프레임워크에서 사용하는 요소의 색상값은 → CGColor로 지정하는 것이었다.

우리가 자주쓰는 view는 UIView라는 UIKit 프레임워크에 속한 요소이다 보니
backgroundColor를 지정할 때, UIColor로 지정을 해주었던 것이고,

그 뷰의 layer는 Core Graphics에서 다루는 요소이니 shadowColor 등을 줄 때는 CGColor로 지정을 해주었던 것이다.

UIColor로 지정된 색상을 CGColor로 바꾸기 위해서는
크게 어려울 것 없이 UIColor.색상.cgColor 형태로 색상을 지정해주기만 하면 된다!

tabBar.layer.shadowColor = UIColor.red.cgColor