ConstraintLayout이란?
ConstraintLayout이란 Layout속의 View들간에 제약조건(Constraints)을 설정함으로써 복잡한 뷰를 만들 수 있도록 설계된 레이아웃이다.
과거 xml에서는 Constraint Layout을 쓰는 것이 권장되었지만, Compose에서는 코드 가독성에 도움이 되는 것이 아니면 권장되지 않는다. 아래에서 이유를 알아보자.
왜 ConstraintLayout을 쓰는 것이 이점이 없어졌을가?
성능상 이점이 없어졌다.
기존 xml로 View를 그릴 때 ConstraintLayout을 이용해 View들간 제약조건을 설정하는 것은 복잡한 레이아웃을 그리기 위해 매우 유용하고 성능면에서 효율적인 방법이었다. 이유는 xml상에서 LinearLayout, RelativeLayout 등을 써서 View를 그릴 경우 복잡한 View를 그리기 위해서는 레이아웃간 중첩이 일어나야 했고, xml에서는 중첩된 Layout과 View들을 Tree구조로 관리했기 때문에 중첩이 많이 일어날 수록 View에 Access하는데 Depth가 깊어졌기 때문에, 뷰를 찾기 위해 O(logN)의 복잡도가 필요했기 때문이다. ConstraintLayout은 View들을 Flat하게 관리하도록 만들어주었고, Flat하게 관리되는 View는 상수 복잡도로 찾을 수 있게 하였다.
*이는 Compose에서도 마찬가지이다.
하지만, Compose는 깊은 레이아웃 계층을 더욱 효율적으로 처리할 수 있도록 설계되었다. 이와 관련된 설명은 다음 링크를 통해 찾아볼 수 있다.
따라서 Column, Row, Box 등의 레이아웃이 아무리 중첩이 일어나도 복잡한 중첩을 많이 시켜도 효율적으로 처리할 수 있다. 이 때문에 성능 면에서 ConstraintLayout을 쓰는 이점이 사라지게 되었다.
사라진 Layout Editor
xml로 UI를 그릴 때는 LayoutEditor을 사용해 UI를 그릴 수 있었다. ConstraintLayout을 이용해 마우스만 이용해 View간에 Constraint만 설정하면 복잡한 UI를 그릴 수 있었다.
하지만, Compose에서는 더이상 Layout Editor이 제공되지 않는다. 따라서 마우스로 컴포넌트간 Constraint를 설정하는 것이 불가능하며 따라서 모든 Constraint를 직접 작성해줘야 한다. 이 때문에 ConstraintLayout을 사용하기 위해서는 다른 Layout에 비해 설정할게 많아 사용하기가 불편해졌다.
그러면 언제 ConstraintLayout을 사용해야 하는가?
뷰가 너무 복잡해서 UI코드상 가독성이 필요할 경우에만 ConstraintLayout을 사용하는 것이 권장되고 있다. 하지만 이런 경우는 거의 없으므로 대부분의 경우 권장되지 않는다고 보면된다.