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

2021. 11. 21. 15:16· Android Jetpack Compose UI/Compose Layout
목차
  1. ConstraintLayout이란?
  2. 왜 ConstraintLayout을 쓰는 것이 이점이 없어졌을가?
  3. 성능상 이점이 없어졌다.
  4. 사라진 Layout Editor
  5. 그러면 언제 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가 깊어졌기 때문에, 뷰를 찾기 위해 O(logN)의 복잡도가 필요했기 때문이다. ConstraintLayout은 View들을 Flat하게 관리하도록 만들어주었고, Flat하게 관리되는 View는 상수 복잡도로 찾을 수 있게 하였다.

*이는 Compose에서도 마찬가지이다.

 

하지만,  Compose는 깊은 레이아웃 계층을 더욱 효율적으로 처리할 수 있도록 설계되었다. 이와 관련된 설명은 다음 링크를 통해 찾아볼 수 있다.

 

출처: https://developer.android.com/jetpack/compose/layouts/constraintlayout?hl=ko

 

따라서 Column, Row, Box 등의 레이아웃이 아무리 중첩이 일어나도 복잡한  중첩을 많이 시켜도 효율적으로 처리할 수 있다. 이 때문에 성능 면에서 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을 사용하는 것이 권장되고 있다. 하지만 이런 경우는 거의 없으므로 대부분의 경우 권장되지 않는다고 보면된다.

반응형
저작자표시 비영리 변경금지
  1. ConstraintLayout이란?
  2. 왜 ConstraintLayout을 쓰는 것이 이점이 없어졌을가?
  3. 성능상 이점이 없어졌다.
  4. 사라진 Layout Editor
  5. 그러면 언제 ConstraintLayout을 사용해야 하는가?


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Android Jetpack Compose UI/Compose Layout' 카테고리의 다른 글
  • [Compose Column] vertical arrangement 사용해 배치하기
  • [Compose Layout] 6. ConstraintLayout 사용법 정리
  • [Compose Layout] 5. BoxWithConstraints 사용법 정리
  • [Compose Layout] 4. Compose Box 사용법 정리
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • Kotlin
  • 코틀린
  • Class
  • junit4
  • GraphQL
  • flow
  • Spring
  • github actions
  • 유닛 테스팅
  • Jetpack Compose
  • 의존성 주입
  • kotlin spring
  • gradle
  • 코루틴
  • junit
  • Coroutine
  • github
  • GIT
  • compose
  • junit5
  • Android Compose
  • dagger2
  • java
  • Dependency Injection
  • 안드로이드
  • Unit Testing
  • HTTP
  • Spring boot
  • 스프링
  • Android

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
[Compose] Compose에서 ConstraintLayout을 쓰는 것이 권장 사항이 아닌 이유
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.