본문 바로가기
안드로이드/Android

[Android] ConstraintLayout

by jinwo_o 2024. 10. 2.

ConstraintLayout

  • 뷰를 배치할 때 *제약 조건을 사용하여 제어하는 방식을 사용한다.
    • 제약 조건 : 뷰가 레이아웃 안의 다른 요소와 어떻게 연결되는지 알려주는 것으로, 뷰의 연결점과 대상을 연결한다.
  • 뷰 간의 관계를 제약 조건으로 지정하여 뷰의 위치와 크기를 결정한다.
    • LinearLayout, RelativeLayout 등의 레이아웃은 뷰의 위치를 상대적으로 지정하는 방식을 사용한다.
      • 예시: LinearLayout 에서는 뷰를 Vertical, Horizontal 하게 배치할 수 있고, RelativeLayout 은 뷰를 상대적으로 배치할 수 있다.
  • 제약 조건은 뷰의 상하좌우와 같은 위치, 크기, 비율 등을 지정할 수 있으며, 이를 통해 다양한 레이아웃을 구성할 수 있다.

 

ConstraintLayout 의 장점

  • 뷰의 깊이(뷰 계층 구조에서 한 뷰가 다른 뷰 위에 쌓이는 깊이)를 줄일 수 있어 *성능을 최적화하고 *가독성을 증대시킨다.
  • 레이아웃을 유연하게 구성할 수 있는 기능을 제공한다.
  • 제약 조건을 사용하여 뷰를 배치하므로, 뷰 계층 구조가 깊어지지 않고도(1 depth 만으로도) 복잡한 화면을 구성할 수 있다.

 

성능 최적화

  • 뷰의 깊이를 줄이는 것은 뷰 계층 구조를 단순화하고 레이아웃을 계산하는 데 필요한 시간과 자원을 줄일 수 있다.
    • Android 공식문서에 따르면 16 ms 당 1 프레임을 렌더링 해주어야 앱이 버벅거린다는 느낌을 받지 않는다.
  • 뷰의 깊이가 깊어질수록 UI 렌더링은 오래 걸린다.
    1. 레이아웃 계산 시간 증가 : 깊은 뷰 계층 구조를 가진 레이아웃을 렌더링 하면, 뷰 계층 구조를 계산하는 데 많은 시간이 걸린다. 레이아웃 계산은 뷰 계층 구조의 크기와 복잡성에 따라 비례하여 늘어난다.
    2. 뷰 계층 구조 복잡성 증가 : 뷰의 깊이가 깊어질수록 뷰 계층 구조가 더 복잡해지며, 뷰 계층 구조 내에서 뷰들 간의 상호작용이 복잡해진다. 이로 인해 UI 이벤트 처리 및 애니메이션 처리 시간이 오래 걸린다.
    3. 뷰 계층 구조 변경 시간 증가 : 뷰 계층에 동적으로 뷰를 추가, 제거 또는 변경하는 데에 오랜 시간이 걸린다.
    4. 메모리 사용 증가 : 깊은 뷰 계층 구조를 가진 레이아웃일수록 메모리를 많이 사용한다. 안드로이드에서는 뷰 계층 구조에 대한 정보를 저장하기 위해 메모리를 사용하는데, 뷰 계층 구조가 깊어질수록 메모리 사용량도 늘어난다. 특히, 안드로이드에서 크게 고려해야 하는 OOM(Out Of Memory)가 발생하지 않도록 최적화하는 데에 도움이 된다.

 

가독성

  • 뷰 계층 구조가 깊다는 것은 그만큼 사람이 보기에 복잡한 구조라는 신호일 수 있다. 그렇기 때문에 코드가 복잡하고 유지보수하기 어려워지는 문제가 발생한다.

 

[Android] ConstraintLayout을 사용해야 하는 이유

최근 github의 안드로이드 프로젝트의 xml을 확인해 보면, 거의 대부분의 프로젝트가 레이아웃을 ConstraintLayout을 채택하고 있습니다. 뿐만 아니라, 안드로이드 스튜디오에서 새로운 프로젝트를 생

itstory1592.tistory.com

'안드로이드 > Android' 카테고리의 다른 글

[Android] View  (0) 2024.10.05
[Android] px(pixel), dp(dip), sp  (0) 2024.10.01
[Android] 메모리 누수  (0) 2024.09.03