[iOS] CALayer란

2020. 12. 31. 03:57iOS

반응형

다들 UIView의 요소들을 둥글게 만들고 싶을 때, layer.cornerRadius를 이용해서 둥글게 만든 기억이 있으시죠⁉️

바로 그 layer가 이 UIView의 요소인 CALayer 클래스를 이용해서 한 방법이랍니다.

 

그렇다면, 이 클래스는 무엇일까요..⁉️

면접에서도 나오는 질문인데, UIView와 CALayer의 차이..?!

 

개발자 문서를 보면 렌더링을 위한 Core Animation 계층이라고 나와있습니다.

 

생각해보면 그동안 UIView.layer을 이용했던 작업들은 보통 그래픽적인 요소들이었던 것 같아요.

ex) 그림자, 그라데이션, 모서리 둥글게 만들기 등등의 작업들을 했었어요.

 

그렇다면 CALayer 클래스를 이용해서 그래픽적인 작업을 하면 어떤 이점이 있어서 굳이 분리해서 사용할까요..?

 

밑의 그림의 그래픽 작업을 위한 요소들인데 위에서 아래로 갈수록 Low-Level로 시스템 친화적인 그림(⁉️)입니다.

Core Graphics, Metal 영역의 최고 장점은 무엇일까요?

 

바로 GPU - Graphics Hardware에 빠르게 접근할 수 있다는 점이에요. 그러나 작업을 할 때, Low-Level이기 때문에 작업할 양이 많다는게 단점이에요...!!

그래서 이러한 단점을 보완하기 위해 더 간단하게 그래픽을 만들 수 있게 만들어 진 것이 Core Animation입니다.

그리고 여기서 굳이 그래픽 작업이 필요하지 않는데..?하고 만든 것이 저희가 자주 사용하는 UIKit의 요소들입니다.

 

즉, 이렇게해서 Core Animation 계층이 만들어지게 되었고 이러한 기능을 담당해주는 것이 CALayer입니다.

 


CALayer

UIView의 요소에 layer가 바로 CALayer의 인스턴스인데요. 

UIView에 꼭 하나씩 nil값이 아닌 값이 있으면서 UIView의 콘텐츠를 그리는 것들을 도와주게 됩니다. 

 

어떻게 도와주느냐...⁉️

아까 위에서 계층 그림에서 보았듯이 UIKit의 요소들은 레이아웃이나 터치 이벤트 처리 등의 작업들을 하고 뷰의 콘텐츠를 그리거나 애니메이션을 그리는 행위들을 Core Animation의 계층에서 위임에서 처리하게 됩니다.

 

즉, 이러한 행위를 CALayer에서 담당하게 됩니다.

 

UIView에서 CALayer들을 가지는 구조들을 보면 다음과 같습니다.

하나의 UIView안에 Root인 CALayer가 위치하게 되고 UIViewsubview를 추가하는 것처럼 여러개의 sublayer를 추가할 수 있습니다.

CALayer가 GPU를 이용해서 전달하여 콘텐츠를 그리고 애니메이션을 수행하기 때문에, CPU에 영향을 주지 않고 작업을 프레임 단위로 수행합니다. 
즉, 그렇기 때문에 빠른 속도와 부드러운 애니메이션을 보여주게 됩니다.

실제 애플에서도 CALayer 객체를 이용해 콘텐츠를 그리거나 애니메이션을 사용하는게 성능이 더 향상된다고 권장하고 있는 것 같습니다!

 

 

오늘은 그 동안 간간히 사용했던 CALayer의 개념에 대해 알아보았습니다.

혹시 잘못된 지식이나 부족한 내용이 있으면 댓글로 남겨주세요 :)

반응형