Android Jetpack Compose UI/Compose Layout

[Compose] Compose에서 ConstraintLayout을 쓰는 것이 권장 사항이 아닌 이유

반응형

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가 깊어졌기 때문이다.

 

하지만,  Compose는 모든 View들을 더이상 Tree구조로 관리하지 않고 Flat하게 관리한다. 따라서 Column, Row, Box 등의 레이아웃이 아무리 중첩이 일어나도 Flat하게 관리되기 때문에 중첩을 많이 시켜도 중첩을 시키지 않는 것과 차이점이 없다. 이 때문에 성능 면에서 ConstraintLayout을 쓰는 이점이 사라지게 되었다.

 

사라진 Layout Editor

그림1. xml Layout Editor

xml로 UI를 그릴 때는 LayoutEditor을 사용해 UI를 그릴 수 있었다. ConstraintLayout을 이용해 마우스만 이용해 View간에 Constraint만 설정하면 복잡한 UI를 그릴 수 있었다.

 

그림2. Compose 

하지만, Compose에서는 더이상 Layout Editor이 제공되지 않는다. 따라서 마우스로 컴포넌트간 Constraint를 설정하는 것이 불가능하며 따라서 모든 Constraint를 직접 작성해줘야 한다. 이 때문에 ConstraintLayout을 사용하기 위해서는 다른 Layout에 비해 설정할게 많아 사용하기가 불편해졌다.

 

그러면 언제 ConstraintLayout을 사용해야 하는가?

뷰가 너무 복잡해서 UI코드상 가독성이 필요할 경우에만 ConstraintLayout을 사용하는 것이 권장되고 있다. 하지만 이런 경우는 거의 없으므로 대부분의 경우 권장되지 않는다고 보면된다.

반응형