ConstraintLayout
- 뷰를 배치할 때 *제약 조건을 사용하여 제어하는 방식을 사용한다.
- 제약 조건 : 뷰가 레이아웃 안의 다른 요소와 어떻게 연결되는지 알려주는 것으로, 뷰의 연결점과 대상을 연결한다.
- 뷰 간의 관계를 제약 조건으로 지정하여 뷰의 위치와 크기를 결정한다.
- LinearLayout, RelativeLayout 등의 레이아웃은 뷰의 위치를 상대적으로 지정하는 방식을 사용한다.
- 예시: LinearLayout 에서는 뷰를 Vertical, Horizontal 하게 배치할 수 있고, RelativeLayout 은 뷰를 상대적으로 배치할 수 있다.
- LinearLayout, RelativeLayout 등의 레이아웃은 뷰의 위치를 상대적으로 지정하는 방식을 사용한다.
- 제약 조건은 뷰의 상하좌우와 같은 위치, 크기, 비율 등을 지정할 수 있으며, 이를 통해 다양한 레이아웃을 구성할 수 있다.
ConstraintLayout 의 장점
- 뷰의 깊이(뷰 계층 구조에서 한 뷰가 다른 뷰 위에 쌓이는 깊이)를 줄일 수 있어 *성능을 최적화하고 *가독성을 증대시킨다.
- 레이아웃을 유연하게 구성할 수 있는 기능을 제공한다.
- 제약 조건을 사용하여 뷰를 배치하므로, 뷰 계층 구조가 깊어지지 않고도(1 depth 만으로도) 복잡한 화면을 구성할 수 있다.
성능 최적화
- 뷰의 깊이를 줄이는 것은 뷰 계층 구조를 단순화하고 레이아웃을 계산하는 데 필요한 시간과 자원을 줄일 수 있다.
- Android 공식문서에 따르면 16 ms 당 1 프레임을 렌더링 해주어야 앱이 버벅거린다는 느낌을 받지 않는다.
- 뷰의 깊이가 깊어질수록 UI 렌더링은 오래 걸린다.
- 레이아웃 계산 시간 증가 : 깊은 뷰 계층 구조를 가진 레이아웃을 렌더링 하면, 뷰 계층 구조를 계산하는 데 많은 시간이 걸린다. 레이아웃 계산은 뷰 계층 구조의 크기와 복잡성에 따라 비례하여 늘어난다.
- 뷰 계층 구조 복잡성 증가 : 뷰의 깊이가 깊어질수록 뷰 계층 구조가 더 복잡해지며, 뷰 계층 구조 내에서 뷰들 간의 상호작용이 복잡해진다. 이로 인해 UI 이벤트 처리 및 애니메이션 처리 시간이 오래 걸린다.
- 뷰 계층 구조 변경 시간 증가 : 뷰 계층에 동적으로 뷰를 추가, 제거 또는 변경하는 데에 오랜 시간이 걸린다.
- 메모리 사용 증가 : 깊은 뷰 계층 구조를 가진 레이아웃일수록 메모리를 많이 사용한다. 안드로이드에서는 뷰 계층 구조에 대한 정보를 저장하기 위해 메모리를 사용하는데, 뷰 계층 구조가 깊어질수록 메모리 사용량도 늘어난다. 특히, 안드로이드에서 크게 고려해야 하는 OOM(Out Of Memory)가 발생하지 않도록 최적화하는 데에 도움이 된다.
가독성
- 뷰 계층 구조가 깊다는 것은 그만큼 사람이 보기에 복잡한 구조라는 신호일 수 있다. 그렇기 때문에 코드가 복잡하고 유지보수하기 어려워지는 문제가 발생한다.
'안드로이드 > Android' 카테고리의 다른 글
[Android] View (0) | 2024.10.05 |
---|---|
[Android] px(pixel), dp(dip), sp (0) | 2024.10.01 |
[Android] 메모리 누수 (0) | 2024.09.03 |