2022년 2학기 모바일 프로그래밍 교과목을 통해 처음으로 안드로이드 스튜디오를 사용하게 됐다.
기대되던 모바일 프로그래밍 과목이었지만. . .
아무도 안드로이드 개발 경험이 없는 와중에 설상가상으로 Pull Request Reviewer의 역할을 맡게 되었다.
이번 모각코에서는 안드로이드를 겉핥기가 아니라 깊이 있게 공부해보려고 한다.
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:text="멍멍이" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:text="야옹이" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:text="꽥꽥이" />
안드로이드 스튜디오에서 개발을 하면 위 코드와 같은 상황이 많이 생긴다.
layout에 대한 값들은 모두 동일하고 text만 다른 버튼들, 혹은 일정한 margin이 반복되는 View들을 생성하는 경우가 빈번하다.
내 프로젝트의 코드가 위와 같다고 가정하고 marginHorizontal 의 값을 20dp에서 18dp로 변경해야 한다면?
우리는 20dp로 적힌 Button을 찾아 모두 18dp로 직접 변경해야 한다.
위 코드의 문제는 크게 두 가지가 있었다!
첫 번째는 코드 자체가 효율적인 코드라고 말하기 힘들다는 점
두 번째는 코드를 수정 및 관리하기에 어려운 코드라는 점
위 코드의 효율성을 높이며 해당 문제를 해결하기 위한 방법에는 여러 가지가 있겠지만
오늘 소개할 방법은 style을 사용하는 방법이다.
1. themes.xml 파일에 적용을 원하는 View의 값들을 item 태그로 감싸 작성한다.
<style name="SameBox" parent="@android:style/Widget.Button">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginHorizontal">20dp</item>
</style>
- themes.xml의 경로는 app > src > main > res > valuees > themes.xml
- themse.xml은 이전 styles.xml 파일과 동일한 기능을 수행
2. style 적용을 원하는 layout에서 해당 style을 적용한다.
<Button
android:id="@+id/button"
style="@style/SameBox"
android:text="멍멍이" />
<Button
android:id="@+id/button3"
style="@style/SameBox"
android:text="야옹이" />
<Button
android:id="@+id/button4"
style="@style/SameBox"
android:text="꽥꽥이" />
HTML, CSS, JS 등 웹 개발 경험이 있는 사람들이면 더욱 쉽게 이해할 수 있을 거라는 생각이 들었다.
style의 경우 1개의 layout에서만 적용하는 것이 아닌 다른 layout에도 적용할 수 있다는 점이 간편하면서도 강력한 기능이라고 생각한다.
코드 중복은 새로운 언어나 프레임워크를 접하는 사람들이면 자연스럽게 겪게 되는 문제인만큼 더욱 다양한 방법을 알아 봐야겠다.
안드로이드 스튜디오에서 코드 중복을 방지할 수 있는 방법을 아는 사람이라면 코멘트를 남겨주면 좋겠다!
'모각코' 카테고리의 다른 글
[모각코 1114] 여러분들의 deprecated된 아이들, 제가 찾아드리겟읍니다. (0) | 2022.11.15 |
---|---|
[모각코 1107] 나같은 실수하지 말것-Python (0) | 2022.11.08 |
[모각코 1031] 안드로이드 프로젝트 README.md 작성하기 (0) | 2022.10.31 |
[모각코 1017] Python 데이터 시각화의 첫 걸음 - matplotlib (0) | 2022.10.26 |
[모각코 1012] 안드로이드 기초는 못참지 (1) - 프로젝트의 구성 (1) | 2022.10.12 |