android

Android XML과 Compose의 차이점?

Seon Dev Notes 2025. 2. 23. 17:45

오늘은 안드로이드 앱 개발에서 UI를 개발 하는 두 가지 방식 XML과 Compose의 차이에 대해 알아보겠습니다.

XML

XML은 태그를 이용하여 객체를 정의하는 마크업 언어로, 부모 - 자식 관계가 있기 때문에 UI의 구조가 ViewGroup - View의 Tree 형태로 표현되어있다.

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Android"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click"/>
</LinearLayout>

Compose

Compose는 안드로이드 네이티브 UI를 개발하기 위해 구글에서 새롭게 출시한 선언형 UI 도구 키트이다.

Column {
    Text(text = "Android")
    Button(onClick = { /* TODO */ }) {
        Text(text = "Click")
    }
}

간단한 예시 비교

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView = findViewById<TextView>(R.id.textView)
        textView.text = "Android"
    }
}

XML

  • setContentView라는 메소드를 이용하여 layout 파일을 보여줌
  • findViewById라는 메소드를 이용하여 id를 이용해 XML에 그린 View를 찾아서 코드단을 연결
  • 그렇게 가져온 View의 텍스트를 변경하라고 명령
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent { 
            Text(text = "Android")
        }
    }
}

Compose

  • 간단한 코드임에도 짧아진 길이
  • 코드 상에서 이러한 Text를 그린다고 선언

명령형 VS 선언형

  • 명령형은 View따로, 로직따로, 하나하나 명령을 해야한다.

-> View 가 많아질수록 내가 어떤 뷰를 연결했는지 헷갈리게 되면서 그 사이에서 실수들이 여럿 발생하여 버그 및 불필요한 작업 시간이 매우 소요된다.

  • 선언형은 상태만 선언하면 UI가 알아서 갱신된다.

-> Compose는 불필요한 보일러플레이트 코드가 줄어들어 버그가 일어날 확률도 줄고 적은 코드로 UI 구현이 가능해서 생산성이 빨라지고 유지보수하기 쉽다.