마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 AttributeSet vs Programmatically 에 관해 뭐가 더 좋은지 궁금합니다.

0 추천
안녕하세요. 3년차 안드로이드개발자입니다.

평소 CustomView 를 많이 이용하는데, AttributeSet 의 존재를 비교적 최근에 알아서 이를 이용하여 적용해봤었습니다.

미리보기로 인하여 미리 보이는거나 Class 에 대한 코드 자체가 어느정도 줄어들었다 생각하여 나쁘지 않은 기술이라 생각했습니다.

그런데, 최근 Google 에서 발표한 Compose 라던지, DataBinding 이 정말로 의미있는것인지에 대한 얘기를 생각해보면

결국엔 xml 에서 뭔가를 하는것이 계속 위험을 안고간다라는 생각이 들긴합니다.

이러한 생각이 드는 상태에서 AttributeSet 을 이용하여 개발을 하는것이 과연 옳을지 궁금하네요

다른분들은 평소 CustomView 개발 하실 때 어떤식으로 하시나요??
원할머니 (120 포인트) 님이 2022년 5월 2일 질문

1개의 답변

0 추천
글쎄요, 어떤 게 정답이라고 할 수는 없습니다. 둘다 완전하지 않은 기술이고 완벽한 기술이란 것도 없습니다. 장점이 있으면 단점이 있게 마련이고 이런 점을 잘 알고 사용하면 된다고 생각합니다.  둘을 간단히 비교하자면(이것도 개인적인 견해의 일부입니다.)

XML은 일단 오래되었고 그만큼 많은 부분이 테스트가 되었다고 생각합니다. 좀더 접근이 쉬운 부분이 있고, 기존의 안드로이드 시스템이 이미 XML기반이기 때문에 그만큼 자료도 더 많고 소스를 봐도 Jetpack Compose보다는 훨씬 이해하기가 쉽습니다.

물론 XML은 상태를 변경하는 방식으로 동작을 하므로 Jetpack Compose 같이 한방향의 redaonly와는 다르게 상태조작에 따른 문제점이 있을 수 있습니다. 하지만 대부분의 경우 그에 따른 해결책이 있구요.  완벽하지는 않지만 XML을 고집한다고 잘못되었다거나 안좋은 방식이라고 할 수 없다고 생각합니다.

반면 Jetpack Compose는 우선 Kotlin 전용입니다. XML기반은 Java/Kotlin. 둘다 사용할 수 있죠. 그리고 Jetpack Compose는 아직은 안정감이 덜한 라이브러리입니다. 무엇보다도 Jetpack Compose는 컴파일러가 우리가 모르는 매직을 수행하기 때문에 그 내부가 XM기반과는 비교가 안되게 복잡합니다. 아마 소스코드를 보더라도 이해하기가 만만치 않습니다. 만약 내부적으로 어떤 문제가 생긴다면 디버깅이 만만치 않을 겁니다.

그렇다고 Jetpack Compose가 안좋은 제품이라고 하기에는 좋은 점도 많습니다. 예를 들면 리사이클러뷰와 같은  역할을 하는 LazyColumn 만들어 보면 XML에 비해 정말 쉽습니다. 그리고 EditText같은 경우도 한방향으로 동작하기 때문에 EditText에 값을 할당할 때  TextWatcher이벤트가 자동으로 호출되지 않습니다. Textfilter 같은 것도 구현하기가 정말 쉬워지구요. 애니메이션 또한 상당히 다양하게 지원되고 커스텀 애니메이션 구현도 쉬워졌습니다. 반면 네비게이션이나 에러메세지 처리 등은 XML보다 오히려 복잡해진 느낌입니다.  아무래도 Jetpack Compose의 강점은 상태관리가 한방향으로 일어나기 때문에 XML기반에서 범하기 쉬운 문제들을 많이 해결할 수 있도록 되어 있습니다. 다만 혹시나 뷰의 성능문제가 생기지 않도록 Recomposition과 같은 새로운 개념의 동작원리를 잘 알아야 하는 것이 필수적입니다.

결론적으로, 정답은 없으며, 프로젝트의 상황과 요구에 적합한 툴을 선택하되 그에 따른 장/단점을 알고 사용하면 된다고 생각합니다.
spark (226,420 포인트) 님이 2022년 5월 2일 답변
...