[Swift] 스마트하게 UIColor 확장하기

어플리케이션을 개발할때에 특정 색들을 지정해서 사용하고 싶을 수 있다. 현재 진행중인 프로젝트에서 사용하는 ColorSet은 다음과 같다.

해당 color 를 UIColor로써 가져오기 오는 방법은 다음과 같다

하지만 해당 색상을 사용할때마다 저런 코드를 작성하는 것은 조금 번거로울 수 있다. 내가 번거롭다고 느끼는 첫번째 이유는

  • 코드가 길다
  • 자동완성처리를 해주지 않는다.

이때에 UIColor class를 extension 해주면 쉽게 해결이 가능하다.

위와 같이 작업을 해주게 되면 다음과 같이 코드에서 참조가 가능하다.

그런데 UIColor를 사용하다 보면 내가 저렇게 직접 설정해주지 않았음에도 불구하고 여러 색상에 접근이 가능하다. 예를 들면 system 색상. 애플 개발자들은 어떤 방식으로 구현하였을지가 궁금해졌고 사수 개발자님과 함께 UIKit library의 UIColor 부분 코드를 뜯어보았다.

open class 를 활용하여서 구현해주고 있었다. open class 가 무엇일까?

open 은 Swift 3 부터 도입된 키워드이다. 간단하게 말하자면

  • open class 는 정의 모듈 외부에서 액세스 및 하위 분류할 수 있고, 개방형 클래스 멤버는 정의 모듈 외부에서 액세스하고 재정의할 수 있다.

고 합니다. 그리고 open 과 비슷한 키워드인 public 이 있는데, public은

  • 액세스할 수 있지만 정의 모듈 외부에서 하위 분류할 수 없고, 구성원에 액세스할 수 있지만 정의 모듈 외부에서 재정의할 수는 없다.

입니다. 끗

그래서 구현된 코드

Born to be solo