관리 메뉴

나만을 위한 블로그

[Manifest-Android] 37. View, ViewGroup의 차이 본문

스터디

[Manifest-Android] 37. View, ViewGroup의 차이

참깨빵위에참깨빵_ 2025. 7. 29. 23:00
728x90
반응형

View는 화면에 표시되는 직사각형 형태의 UI를 구현하는 최소 단위의 단일 컴포넌트다. Button, TextView 등 모든 UI 컴포넌트의 기본 클래스다. 각 뷰는 화면에 렌더링되면 터치 or 키 이벤트 같이 앱 사용자와의 상호작용을 처리한다.

View 시스템은 전체 UI 프레임워크의 중추 역할을 하는 안드로이드 개발의 핵심 기반 중 하나다. 렌더링, UI 컴포넌트 업데이트, 사용자 상호작용을 가능하게 하는 콜백 시스템 관리를 담당한다. 기본 버튼부터 복잡한 레이아웃까지 모든 UI 요소는 View 클래스 위에 구축된다.

AOSP의 View.java 내부 구현은 34,000줄 이상의 코드로 구현돼 있다. 이게 의미하는 건 View 인스턴스를 만들고 관리하는 게 상당한 오버헤드가 수반됨을 뜻한다. 결과적으로 불필요한 View 생성은 앱 성능에 영향을 미쳐 메모리 사용량을 늘리고 전체 레이아웃의 렌더링 속도를 늦출 수 있다.

성능을 최적화하려면 불필요한 뷰 인스턴스를 가능한 피해야 한다. 또한 여러 번 중첩된 뷰는 측정(measure), 레이아웃, 렌더링 시간을 증가시킬 수 있어서 레이아웃 트리 계층 구조를 단순화하는 게 중요하다. UI 계층 구조를 알고 효율적으로 유지하면 더 부드러운 성능, 더 나은 응답성, 낮은 리소스 소비를 보장할 수 있다.

 

뷰그룹은 여러 뷰 또는 다른 뷰그룹 요소를 포함하는 일종의 컨테이너다. 리니어 레이아웃, 컨스트레인트 레이아웃 같은 레이아웃의 기본이 되는 클래스다

뷰그룹은 자식 뷰의 레이아웃, 위치를 관리하며 화면에서 자식 뷰들의 사이즈가 측정되고 그려지는 방식을 정의한다.

 

val linearLayout = LinearLayout(context).apply {
    orientation = LinearLayout.VERTICAL
    addView(TextView(context).apply { text = "Child 1" })
    addView(Button(context).apply { text = "Child 2" })
}

 

뷰그룹 클래스는 View를 확장하고 ViewParent, ViewManager 인터페이스를 모두 구현한다. 뷰그룹은 다른 뷰 객체를 위한 컨테이너 역할을 하므로 독립형 뷰보다 본질적으로 더 복잡하고 리소스 집약적이다. 리니어 레이아웃 등 레이아웃은 모두 뷰그룹 구현의 예시고, 뷰그룹 인스턴스의 과한 중첩은 렌더링 성능에 부정적 영향을 줄 수 있다.

ViewParent 인터페이스는 뷰 객체의 부모 역할을 담당하며 레이아웃 측정, 터치 이벤트 처리, 렌더링 순서를 관리한다. 반면 ViewManager 인터페이스는 뷰그룹 계층 안에서 자식 뷰를 동적 추가하고 제거하는 메서드를 제공한다. 뷰그룹은 추가적인 레이아웃 계산을 수행하고 여러 자식 뷰를 관리해야 하므로 불필요한 중첩을 줄이는 게 성능을 최적화하고 원활한 UI 렌더링을 보장한다.

 

둘의 주요 차이

 

  1. 목적
    • View는 콘텐츠를 표시하거나 사용자와 상호 작용하도록 설계된 단일 UI 요소다
    • ViewGroup은 여러 자식 뷰를 구성하고 관리하기 위한 컨테이너다
  2. 계층
    • View는 UI 계층 구조의 리프 노드(leaf node)다. 따라서 다른 뷰를 포함할 수 없다
    • ViewGroup은 여러 자식 뷰 또는 다른 ViewGroup 요소를 포함할 수 있는 브랜치 노드(branch node)다
  3. 레이아웃 동작
    • View는 레이아웃 매개변수에 의해 정의된 자체적인 크기와 위치를 가진다
    • ViewGroup은 LinearLayout 또는 ConstraintLayout 같이 정의된 레이아웃 규칙을 사용해 자식 뷰의 크기, 위치를 결정한다
  4. 상호작용 핸들링
    • View는 터치, 키 이벤트를 처리할 수 있다
    • ViewGroup은 onInterceptTouchEvent와 같은 메서드를 사용해서 자식의 이벤트를 가로채고 관리할 수 있다
  5. 성능
    • ViewGroup은 계층 구조로 인해 렌더링에 복잡성을 더한다
    • 중첩된 ViewGroup을 과도하게 사용하면 렌더링 시간 증가 및 UI 업데이트 지연과 같은 성능 문제가 발생할 수 있다
반응형
Comments